AGENTS.md β AI Agent Guide for zer0-mistakes¶
Cross-tool entry point for AI coding agents working in this repository (GitHub Copilot, OpenAI Codex, Cursor, Aider, Jules, Continue, Claude Code, and any future agent that follows the agents.md convention).
This file is intentionally short. It tells an agent where to look for the detailed, file-scoped guidance that already lives under .github/. It does not duplicate that content β keep changes here minimal and instead update the targeted instruction files when patterns evolve.
π§ Project Snapshot¶
- What it is: A Docker-first Jekyll theme (Ruby gem
jekyll-theme-zer0) with Bootstrap 5.3.3, GitHub Pages remote-theme support, automated semantic releases to RubyGems, and privacy-compliant analytics. - Primary language(s): Ruby (gem), Liquid/HTML (theme), SCSS, Bash (tooling).
- Version source of truth:
lib/jekyll-theme-zer0/version.rb. - Default dev environment: Docker Compose (
docker-compose up). A local Ruby/Bundler workflow also works.
For the full architectural and product overview, see README.md and .github/copilot-instructions.md.
π Where Agent Guidance Lives¶
This repo follows a layered guidance model. Read the layers that match the files you are about to touch β do not load everything up front.
| Layer | Location | When to read |
|---|---|---|
| Cross-tool entry point | AGENTS.md (this file) |
Always β first |
| Project-wide Copilot instructions | .github/copilot-instructions.md |
Always β second; full architecture, commands, conventions |
| File-scoped instructions | .github/instructions/*.instructions.md |
When editing files matching the applyTo: glob in each file's front matter |
| Reusable prompts (chat/agent modes) | .github/prompts/*.prompt.md |
When asked to perform a multi-step task that matches a prompt |
| Project "seed" blueprint | .github/seed/*.md |
For deep architectural decisions or rebuilding subsystems from scratch |
| Tactical backlog | _data/backlog.yml |
When picking up or filing granular tasks (synced to GitHub Issues) β see the continuous-evolution loop below |
| Obsidian vault docs | pages/_docs/obsidian/ |
When working with [[wiki-links]], ![[embeds]], callouts, or the wiki-index/JS resolver |
| Cursor slash-commands | .cursor/commands/*.md |
Auto-loaded by Cursor; mirrors the prompts above |
| CI / quality config | .github/config/, .github/workflows/ |
When changing lint rules, tests, or release automation |
File-scoped instruction map¶
Apply the instruction file whose applyTo: glob matches the path you are editing (most editors do this automatically; agents without that capability should load them manually):
| Editing files in⦠| Read |
|---|---|
_layouts/** |
.github/instructions/layouts.instructions.md |
_includes/** |
.github/instructions/includes.instructions.md |
scripts/** |
.github/instructions/scripts.instructions.md |
scripts/lib/install/**, scripts/bin/install, install.sh, templates/{profiles,deploy,agents,ai}/** |
.github/instructions/install.instructions.md |
_plugins/obsidian_links.rb, assets/js/obsidian-*.js, assets/data/wiki-index.json, _includes/content/backlinks.html, pages/_docs/obsidian/**, test/test_obsidian.sh, test/test_ruby_converter.rb, test/test_resolver.js |
.github/instructions/obsidian.instructions.md |
_sass/**, assets/css/** |
.github/instructions/sass.instructions.md |
test/** |
.github/instructions/testing.instructions.md |
docs/**, pages/_docs/**, *docs*.md |
.github/instructions/documentation.instructions.md |
CHANGELOG.md, **/version.*, *.gemspec, package.json |
.github/instructions/version-control.instructions.md |
_data/backlog.yml, scripts/sync-backlog.*, .github/workflows/sync.yml |
.github/instructions/backlog.instructions.md |
pages/**/*.md, .github/config/content_review.yml, .claude/agents/content-reviewer.md, scripts/content-review.rb, .github/workflows/ai-content-review.yml |
.github/instructions/content-review.instructions.md |
_includes/components/ai-chat.html, assets/js/ai-chat.js, templates/deploy/chat-proxy/** |
.github/instructions/ai-chat.instructions.md |
_data/features.yml, features/**, pages/features.md, scripts/{validate-features.rb,tag-features}, test/test_features.sh β and whenever you add/alter a feature |
.github/instructions/features.instructions.md |
Reusable prompts¶
| Task | Prompt |
|---|---|
| Full release pipeline (analyze β validate β version β publish β verify) | .github/prompts/commit-publish.prompt.md |
| Add a new Obsidian wiki-link / embed / callout syntax across all rendering paths | .github/prompts/obsidian-add-syntax.prompt.md |
| Front matter audit / fix across content | .github/prompts/frontmatter-maintainer.prompt.md |
| Review content for SEO / consistency / polish (per-collection) | .github/prompts/content-review.prompt.md |
| Rebuild the theme from scratch (deep blueprint) | .github/prompts/seed.prompt.md |
| Review the repo and triage all open issues into the backlog | .github/prompts/repo-audit.prompt.md |
| Implement the next open backlog task and open a PR | .github/prompts/backlog-implement.prompt.md |
| Implement ONE issue/task β route β loop-until-green β PR (human-dispatched) | .github/prompts/issue-implement.prompt.md |
| Plan/sequence the open backlog (the planning committee) | .github/prompts/issue-plan.prompt.md |
Workflow skills¶
Operational checklists under .github/skills/<name>/SKILL.md. Read the matching skill before the action it covers.
| Doing⦠| Skill |
|---|---|
| Starting any change β branch β commit β PR, splitting mixed work, keeping generated/lock files out of feature PRs | .github/skills/change-workflow/SKILL.md |
| Validating a change before commit/PR (Jekyll build, doctor, tests) | .github/skills/validate-build/SKILL.md |
| Any UI/behavioural change β regression test + before/after evidence (required for fixes to auto-merge) | .github/skills/visual-evidence/SKILL.md |
| Reviewing content PRs for SEO/consistency/polish | .github/skills/content-review/SKILL.md |
Planning/sequencing the backlog (the /issue-plan committee fan-out) |
.github/skills/committee-plan/SKILL.md |
π Continuous-Evolution Loop¶
This repo runs a self-sustaining backlog loop so AI agents can keep improving it between human sessions:
- Audit + issue intake (
/repo-audit, scheduled weekly) reviews tests, docs, and roadmap delivery and triages all open GitHub issues into_data/backlog.yml(source: issue, adopted vialinks.issueβ no duplicates). The committee/issue-planthen sequences them and/issue-implement(human-dispatched) routes each to a specialized agent. Seedocs/systems/continuous-evolution.md. - Sync (
.github/workflows/sync.yml) mirrors open tasks to GitHub Issues (agent-readylabel) and closes issues for tasks markeddone. - Implement (
/backlog-implement, scheduled) picks the top open task, builds it on a branch, validates, and opens a PR. Low-risk classes (docs/deps/lintwithrisk: low) auto-merge once CI is green via.github/workflows/auto-merge.yml; everything else waits for human review.
_data/backlog.yml is the source of truth β edit the file, not the issues. Full design, autonomy policy, and how to pause the loop: docs/systems/continuous-evolution.md.
β‘ Essential Commands¶
Wrappers at
scripts/{build,release,test}forward to the canonicalscripts/bin/implementations. Both forms work.
# Development
docker-compose up # Start Jekyll dev server (recommended)
docker-compose exec jekyll bash # Shell into the container
docker-compose down -v # Clean up
# Build / test
./scripts/bin/build # Build the gem
./scripts/bin/test # Run all test suites (lib + theme + integration)
./test/test_runner.sh # Theme test orchestrator
docker-compose exec -T jekyll bundle exec jekyll build \
--config '_config.yml,_config_dev.yml' # Validate Jekyll build
# Release (semantic-version aware)
./scripts/bin/release patch # 0.0.X
./scripts/bin/release minor # 0.X.0
./scripts/bin/release major # X.0.0
./scripts/bin/release patch --dry-run # Preview only
# Quality
markdownlint "**/*.md" --ignore node_modules
yamllint -c .github/config/.yamllint.yml .
β Operating Rules for Agents¶
- Make minimal, surgical changes. Match the existing style. Do not refactor unrelated code.
- Respect the layered guidance. When a file-scoped instruction conflicts with a generic best practice, the file-scoped instruction wins.
- Validate before declaring done. At minimum, run the relevant test command(s) above. For theme/layout/include changes, run the Docker Jekyll build.
- Update
CHANGELOG.mdfor any user-visible change. Follow the Keep a Changelog format already in the file. - Bump the version only via
./scripts/bin/release(or by editinglib/jekyll-theme-zer0/version.rbas part of a release commit). Never bump it in unrelated PRs. - Do not commit secrets. Use environment variables;
RUBYGEMS_API_KEYandGITHUB_TOKENare provided in CI. - Prefer existing libraries and patterns. Bootstrap 5 components, the
Bootstrap Icons set, and the modular
_includes/system already cover most UI needs. - Document non-obvious decisions in the relevant instruction file so the next agent benefits from the context.
π§© Extending Agent Capabilities¶
This repository is designed to be extendable by both humans and agents. To add new agent capabilities, follow these patterns:
Add a new file-scoped instruction set¶
- Create
.github/instructions/<area>.instructions.mdwith front matter:
- Cover: overview, structure, standards, patterns, best practices, testing,
documentation (mirror existing files such as
layouts.instructions.md). - List it in
.github/instructions/README.mdand add a row to the File-scoped instruction map above.
Add a reusable prompt / agent mode¶
- Create
.github/prompts/<task>.prompt.mdwith front matter:
---
agent: agent
mode: agent
description: "Short description of the multi-step task"
tools: [optional, list, of, tool, names]
---
- Write the prompt as a numbered, checkable workflow (see
commit-publish.prompt.mdfor the canonical pattern). - If you want it available as a Cursor slash-command, mirror the file into
.cursor/commands/<task>.md.
Add a new tool-specific config¶
When onboarding a new agent or IDE that uses its own config file, add it without duplicating instruction content β point the new file at this AGENTS.md and the layered guidance under .github/. Examples:
- Claude Code:
CLAUDE.mdβ "SeeAGENTS.md." - Aider:
.aider.conf.ymlwithread: [AGENTS.md, .github/copilot-instructions.md]. - Continue:
.continuerc.jsonreferencing the same files.
This keeps a single source of truth and prevents drift.
Add a new automation script¶
- Place the implementation under
scripts/bin/<name>(executable,set -euo pipefail). - Share logic via
scripts/lib/*.shmodules. - Optionally add a thin wrapper at
scripts/<name>for backward compatibility. - Follow the conventions in
.github/instructions/scripts.instructions.md(logging helpers, parameter validation,--dry-runsupport, help text).
π Quick Links¶
- Project README:
README.md - Contributing:
CONTRIBUTING.md - Security policy:
SECURITY.md - Code of conduct:
CODE_OF_CONDUCT.md - Changelog:
CHANGELOG.md - Main Copilot instructions:
.github/copilot-instructions.md - Instruction index:
.github/instructions/README.md
Last reviewed: 2026-04-18. Keep this file short β push detail into .github/instructions/ and .github/prompts/.