agent-sdlc
AGENTS.md2 starsChanged 4 months agoApache-2.0View on GitHub
Stranger litmus test: would this instruction make sense to a stranger who cloned this repo? If no, it belongs in AGENTS.local.md. A gitignored AGENTS.local.md may exist beside this file; if present, read and follow it before starting work. Pointer files carry no content: edits go to AGENTS.md or AGENTS.local.md, never CLAUDE.md. It is a frozen one-line pointer and says so in-file. Lazy creation: if an agent has private-routed content (per the litmus test above) and no AGENTS.local.md exists yet in…
Where files are headingNew AGENTS.md files have more rules about keeping secrets out of the code, and fewer about code style.
Of the AGENTS.md files we read, the 31,774 first seen in the last six months, against the older ones: the kind of rule that gained most share, and the kind that lost most. About files like this in general, not this one, and an estimate, since a kind is a pattern in the words.
In this repository18 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- llms.txtllms.txt
- acceptance-criteriaSkill
- architecture-designSkill
- buildSkill
- gateSkill
- getting-startedSkill
- handoffSkill
- ideaSkill
- lightSkill
- linear-syncSkill
- planSkill
- pr-reviewSkill
- repo-setupSkill
- techstackSkill
- writing-readmesSkill
- writing-repo-docsSkill
- writing-technical-docsSkill
The file
We split this AGENTS.md into the rules it gives an agent
1 rule. About 0 are common, 1 is distinctive, and 0 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- could be automatic: a setting could enforce it
- Distinctive: line 90
Never commit straight to main.
≈ “Common” is an estimate: at least 1 in 5 of the 40,246 AGENTS.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
AGENTS.md
Routing guideline
Stranger litmus test: would this instruction make sense to a stranger who cloned this repo? If no, it belongs in AGENTS.local.md.
A gitignored AGENTS.local.md may exist beside this file; if present, read and follow it before starting work.
Pointer files carry no content: edits go to AGENTS.md or AGENTS.local.md, never CLAUDE.md. It is a frozen one-line pointer and says so in-file.
Lazy creation: if an agent has private-routed content (per the litmus test above) and no AGENTS.local.md exists yet in this working copy, it creates one (the committed .gitignore entry already covers it), so the pattern self-propagates to every clone.
@AGENTS.local.md
Project overview
agent-sdlc is a full-SDLC pipeline for AI coding agents that takes an idea to a reviewed PR,
authored to the open SKILL.md standard and served as a single-plugin marketplace named
agent-sdlc for Claude Code, Cursor, and OpenAI Codex, and as a directly-installable package for
pi. You own the thinking; the agent owns the breakdown.
The repo root is both the plugin and its marketplace:
agent-sdlc/ (repo root = the plugin AND its marketplace)
├── .claude-plugin/ ← marketplace.json (source "./") + plugin.json }
├── .cursor-plugin/ ← marketplace.json (source ".") + plugin.json } version in LOCKSTEP
├── .codex-plugin/ ← plugin.json (marketplace: .agents/plugins/) } across all four
├── package.json ← pi manifest: keywords + pi.skills -> ./skills } plugin manifests
├── bin/sdlc-check ← on-PATH launcher (resolves ../checker relative to itself: layout-proof)
├── checker/ ← sdlc-check.mjs (zero-dep Node ≥22 ESM enforcement spine) + its node:test suite
├── skills/ ← the pipeline + documentation + repo-setup skills, some with reference/
├── docs/ ← user + contributor docs (landing index, quickstart, usage/, development)
└── docs/specs/ ← the dogfood spec tree (exemplar chains + a living overview.md)The default path for small work is light → gate → build → pr-review. The full chain
(idea → acceptance-criteria → architecture-design → techstack → plan → gate → build → pr-review)
runs only when the user asks or a narrow trigger fires (new runtime dependency, new public API,
new trust or process boundary). When unsure, stay light. Traceability spine AC-N → C-N →
product → T-N; the read-only gate walks the chain; light build has no per-task reviewer;
full build has one initial review and at most one remediations pass; pr-review writes the
AC→proof verification-report.md, runs sdlc-check fail-closed, opens the PR, and calls
review_panel (portable reviewer fallback when absent). The owner is the merge gate.
linear-sync (off by default) mirrors stages into Linear.
Build / test / verify
Zero runtime dependencies; Node ≥22, ESM.
- Test:
node --test checker/*.test.mjs: read the exit code directly, never piped. - Canonical verify (self-gate):
node checker/sdlc-check.mjs <spec>: must exit 0 on every shipped spec. - On-PATH launcher:
bin/sdlc-checkresolves../checkerrelative to itself (layout-proof). - CI runs the checker suite + self-gate on push/PR (ubuntu + macos matrix, least-privilege token).
Conventions
Authoring (match the existing skills):
- Frontmatter:
name(matches the directory) + a richdescriptionending with explicitUse AFTER … BEFORE …andTriggers: …(+ trigger-scope qualifiers). Strict-YAML parseable. - Frontmatter limits are the open standard's, and they are enforced by test
(
checker/skill-frontmatter.test.mjs):descriptionmax 1024 characters,namemax 64, lowercase alphanumeric with single hyphens, matching its directory. Length is measured on the folded value a harness sees, not on the source lines. A validating harness (pi does this) only warns and still loads the skill, so an over-long description degrades activation quietly in someone else's repo: that is why it is a red bar here rather than a convention. Leave headroom; a description at 1020 is one edit from being over. - Body sections, in order: one-paragraph intent;
<HARD-GATE>; the method (## Checklist/## The X bar);## Principles;## Rationalizations(excuse→rebuttal table);## Red flags;## Done when;## The artifact (output);## Conventions. - Voice: terse, high-signal, imperative.
->arrows, no filler. No em-dashes: use a colon, a comma, parentheses, or two sentences. New and edited text follows this; the existing corpus is not retro-fitted, so expect both styles until a file is next touched. - Reference files: long material goes in
reference/subdirs the SKILL.md links on demand. Every target harness auto-discovers anyskills/subdir with a SKILL.md, so no manifest edit per skill. - Checker coupling: the checker grammar is documented in the stage SKILL bodies. Change grammar
only with tests (
node --test checker/*.test.mjs, exit code read directly, never piped). - Skill text stays self-contained: it never cites dogfood spec AC ids or
docs/specs/…paths (irrelevant to a user's agent). The pipeline skills' genericAC-N/docs/specs/<feature>/grammar is their contract and stays.
Git + release:
- Conventional Commits with an area scope:
feat(build): …,feat(T-N): …(build tasks; the recorded-commit rule matches the scope position),docs(agent-sdlc): …,chore(release): …. - Never commit straight to
main; branch → merge fast-forward, SHA-preserving (REQUIRED: the checker's recorded-commit rule needs every task SHA reachable; never squash/rebase-merge). Delete merged branches. Nevergit add -A(this repo carries intentionally-untracked trees); add paths explicitly. - Releases are gated on a version bump (Claude Code caches by
plugin.jsonversion): bump all four version fields in lockstep (.claude-plugin/plugin.json,.cursor-plugin/plugin.json,.codex-plugin/plugin.json, andpackage.json), refresh the description if scope changed, commit, push, then a plugin-scoped annotated tag (agent-sdlc-vX.Y.Z) + GitHub release. License: Apache-2.0 (all plugin.jsons +package.jsoncarry it). The marketplace manifests (.claude-plugin,.cursor-plugin,.agents/plugins/marketplace.json) carry no version. - Users install/update: Claude Code
/plugin marketplace add smarzban/agent-sdlc+/plugin install agent-sdlc@agent-sdlc(update via/plugin marketplace update agent-sdlc); Cursor imports the repo URL as a team marketplace (re-import to refresh); Codexcodex plugin marketplace add smarzban/agent-sdlc+codex plugin add agent-sdlc@agent-sdlc; pipi install git:github.com/smarzban/agent-sdlc. Full walkthrough indocs/install.md. - Review at
pr-reviewruns through Review panel (review_panel); a portable reviewer-subagent fallback runs when it is absent. The owner judges the report. Suite verdicts via a machine-readable reporter; exit codes read directly.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

