agentic-dev-team
CLAUDE.md295 starsChanged 2 months agoMITView on GitHub
This is the marketplace repository for the dev-team Claude Code plugin. Length is the tell: if a reply is over ~10 lines and I didn't ask for depth, it's wrong. Detail I have to skim to find the answer is worse than no answer.
- Pipes a download into a shell
- Installs packages
We split this CLAUDE.md into the rules it gives an agent
14 rules. About 0 are common, 7 are distinctive, and 7 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈7
Distinctive · estimate
This author's own choices. Worth a look.
7
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 9
Default to a few sentences.
- Distinctive: line 11
Answer the question asked. Nothing else: No adjacent findings, no "while I was looking I noticed", no caveats I didn't ask for.
- Distinctive: line 12
One thing at a time: Never hand me a numbered list of 3+ considerations, options, or trade-offs unless I asked for options.
- Very specific: line 25
Docs-only PRs auto-merge: If the diff touches only *.md/.gitignore/LICENSE and no code/agent/skill/hook, arm auto-merge at open: gh pr …
- Distinctive: line 27
Verify runtime properties by exercising them at runtime — byte-compile/import checks prove a module parses, not that it runs.
- Distinctive: line 35
Follow the Google Developer Documentation Style Guide.
- Distinctive: line 36
Use ASD-STE100-derived precision rules.
- Very specific: line 86
Run npm ci as the first step in any new worktree.
- Very specific: line 90
Every shipped script under plugins/dev-team/ is Python 3.10+, stdlib only (see ADR 0014, ADR 0015, ADR 0031):
- Very specific: line 92
All shipped hooks/scripts are .py.
- Very specific: line 113
Run /agent-audit after changes.
- Distinctive: line 122
Prefer path 1; use path 2 only when the behavior can't be reproduced by invoking the hook module directly.
- Very specific: line 139
Use graphify-out/wiki/index.md for broad navigation.
- Very specific: line 140
After modifying code, run graphify update ..
≈ “Common” is an estimate: at least 1 in 5 of the 25,680 CLAUDE.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
Agentic Dev Team — Plugin Development
This is the marketplace repository for the dev-team Claude Code plugin.
General
Unless asked to behave otherwise, always give concise responses and scrifice grammar for the sake of concision. Ask clarifying questions when needed and offer your best guess at available interpretations/answers for those questions when possible.
Be RUTHLESSLY concise — this is the rule I break most often
Default to a few sentences. If the answer is "yes", say "yes" and stop.
- Answer the question asked. Nothing else. No adjacent findings, no "while I was looking I noticed", no caveats I didn't ask for. Sit on it until I ask.
- One thing at a time. Never hand me a numbered list of 3+ considerations, options, or trade-offs unless I asked for options. Pick one, recommend it, move on.
- No teaching. Skip the mechanism, the background, the "why this matters". State the conclusion. I'll ask why if I care.
- No tables, no headers, no bold-label paragraphs for a simple answer. Prose or a couple of lines.
- Cut every parenthetical, every "worth noting", every "the real finding is".
- Corrections: one sentence, no post-mortem.
Length is the tell: if a reply is over ~10 lines and I didn't ask for depth, it's wrong. Detail I have to skim to find the answer is worse than no answer.
Working Rules
- Always work on a branch. Never commit directly to
main. Every change lands via a feature branch and PR. Release-please's own commits are the only exception. If a commit lands onmainlocally by accident, resetmaintoorigin/mainand move the commit to a branch before pushing. - Pull
origin mainbefore starting work.git fetch origin mainat session start and before branching; branch fromorigin/maindirectly (git switch -c <branch> origin/main). If your branch already exists andorigin/mainmoved, merge/rebase it in before continuing. - Squash-merge all PRs:
gh pr merge <num> --squash.mainforbids force-pushes. - Docs-only PRs auto-merge. If the diff touches only
*.md/.gitignore/LICENSEand no code/agent/skill/hook, arm auto-merge at open:gh pr merge <num> --auto --squash. Anything else needs explicit human merge. - Deterministic tools over inference. Never dispatch a skill or agent for work a tool can decide — a compiler, test suite, linter, parser, schema validator, or
gitanswers a mechanical question directly; a model's answer to one is a guess that fails silently. Prefer, in order: (1) run the real thing, (2) a deterministic script over its output, (3) a model, only for what's left.- Verify runtime properties by exercising them at runtime — byte-compile/import checks prove a module parses, not that it runs.
chk_python_floorruns a real test slice (FLOOR_TEST_SLICEintests/repo/test_python_floor.py); don't duplicate that list elsewhere. - A gate that cannot fail is worse than no gate — make a new gate fail on purpose once before trusting it.
- Name what a gate does not cover.
chk_python_floorbounds the oldest supported interpreter;chk_python_ceiling(PYTHON_CEILINGinscripts/ci-local.sh) bounds the newest and runs the full pytest directory list, not a curated slice. It'sexemptin.github/required-status-checks.json(advisory) — treat a red run as blocking anyway. - Gates are platform-bound too. Every gate here runs on
ubuntu-*; every maintainer develops on macOS — watch for GNU/BSD divergence (e.g.mktemp -tbehaves differently). Portable form:mktemp "${TMPDIR:-/tmp}/prefix-XXXXXX"with theXs trailing. - Review your own fix before calling it done. Dispatch review agents (
correctness-review,test-review) at your own diff from the top-level session and verify each finding by reproducing it.
- Verify runtime properties by exercising them at runtime — byte-compile/import checks prove a module parses, not that it runs.
- A mechanical finding reported twice becomes a check. On the second report of the same mechanically-checkable finding, add a
CHECKSentry torepo_invariants.pyin the same PR that fixes it. - Prefer Python over bash, repo-wide. Stdlib-only
.pyunderplugins/dev-team/. Bash only for a genuine shell-script target or the unavoidable bootstrap shim. New.batsfiles are a review finding — port totest_*.py(see ADR 0014, ADR 0015). - Documentation style. Applies to all prose in docs, skills, and agents; rules in
documentation-style.md.- Follow the Google Developer Documentation Style Guide.
- Use ASD-STE100-derived precision rules.
- Apply Zinsser's four principles: clarity, simplicity, brevity, and humanity.
- Specs and plans are GitHub issues, not files. A spec becomes an epic issue, each plan slice a sub-issue — create them by default. Fall back to
docs/specs/<slug>/{spec.md,plans/}only with no GitHub connection. - PRs close the issues they address.
Closes #Nper sub-issue,Part of #<epic>for the epic. Theepic-auto-closeworkflow closes the epic once its last sub-issue closes — GitHub itself won't. - New reports land in
.dev-team-reports/; the rootreports/dir is legacy. docs/marketplace-builder-plugin-playbook.md— how to build a plugin for this marketplace pattern.docs/using-plugin-skills-in-the-web-environment.md— using a plugin's skills from a Claude Code web session.
Developing the Plugin
Edit files directly in plugins/dev-team/. All plugin components (agents, skills, hooks) live there.
Prerequisites
scripts/ci-local.sh (run by the pre-push hook) needs on every dev machine:
jq,python3,uv(brew install jq python3 uv, oruvviacurl -LsSf https://astral.sh/uv/install.sh | sh).shellcheck, version-pinned asSHELLCHECK_VERSIONinscripts/ci-local.sh(fetched to~/.cache/agentic-dev-team/on first use — not from a package manager).- Python deps:
python3 -m pip install -r requirements-dev.txt. On a PEP 668 "externally-managed" interpreter, use a project.venv/, or letdev-setup.shretry--user/--break-system-packagesfor you. - Graphify (optional):
uv tool install graphifyy, thendev-setup.shrunsgraphify hook install(nevergraphify install --project, which overwrites this file). Build the graph on demand withgraphify extract .. Use codegraph for structural queries while editing; graphify for architecture/onboarding across code+docs+infra.
One-shot setup: bash scripts/dev-setup.sh (safe to re-run). ci-local.sh itself checks these and points at dev-setup.sh if anything's missing.
Profiling the gate: CI_LOCAL_TIMING=1 appends per-check and total wall-clock timing.
The pre-push pytest gate spans more than plugins/dev-team/tests. It runs plugins/dev-team/tests tests/repo tests/agents tests/commands tests/docs tests/knowledge tests/stack_aware tests/skills tests/scripts tests/hooks. Editing agent/skill markdown can break repo-level content-guards outside plugins/dev-team/tests — always run the full dir list, plus python3 scripts/check_md_references.py and python3 plugins/dev-team/hooks/lib/build_knowledge_index.py, before pushing plugin-content changes.
The inner loop
"What does this change affect" is a mechanical question a program should answer, not a guess:
--lf/--ff— pytest built-ins, free.--lfre-runs last run's failures;--ffruns them first.Impact selection —
scripts/impact_tests.pymaps changed files to the tests that reach them viapytest-cov's--cov-context=test:python3 scripts/impact_tests.py build --out .cache/impact-map.json -- \ plugins/dev-team/tests tests/repo tests/agents tests/commands tests/docs \ tests/knowledge tests/stack_aware tests/skills tests/scripts tests/hooks python3 scripts/impact_tests.py select --map .cache/impact-map.json \ --changed-from-git | xargs python3 -m pytest -qselectexits 2 (run the full suite) whenever it can't be sure — missing/malformed map, an unmapped changed file, or a changed test file. Rebuild the map after adding tests or source files.- The full directory list — what
pre-pushand CI run, and the fallback whenever selection refuses.
scripts/ci_tree_cache.py skips chk_hook_units outright when the working tree is byte-identical to one that already passed; CI_LOCAL_NO_TREE_CACHE=1 forces a run.
Worktrees — run npm ci first
Run npm ci as the first step in any new worktree. An unprovisioned worktree has no node_modules, so git hooks silently don't run — ci-local.sh/CI backstop it. SessionStart hooks (.claude/ensure_npm_ci.py, .claude/ensure_code_graph_tools.py) do this automatically on a best-effort basis.
Script authoring — Python only
Every shipped script under plugins/dev-team/ is Python 3.10+, stdlib only (see ADR 0014, ADR 0015, ADR 0031):
- All shipped hooks/scripts are
.py. The only.share the two pre-Python bootstrap shims (install.sh,hooks/py.sh) that must run before an interpreter is guaranteed on PATH. - Stdlib only — no
pip install, norequirements.txtfor shipped code. - Probe OS-specific paths at runtime rather than hard-coding them.
- Tests are pytest,
test_*.pyunder the plugin'stests/tree.
Repo-root scripts/*.sh are out of scope — they orchestrate dev tooling, not shipped code.
Testing locally
claude plugin marketplace add /path/to/agentic-dev-team
claude plugin install --scope project dev-team@bfinsterAdding agents, skills, or hooks
- Agent:
.mdfile inplugins/dev-team/agents/ - Agent-loaded skill:
SKILL.mdunderplugins/dev-team/skills/<name>/ - User-invocable skill: same, with
user-invocable: truein frontmatter - Hook:
.pyfile inplugins/dev-team/hooks/, registered inplugins/dev-team/settings.json
Run /agent-audit after changes. See plugins/dev-team/docs/developer-notes.md for the full maintainer index.
Testing hook changes before release
A hook edit in this checkout doesn't affect a live session until it ships — real hook invocations run from the installed plugin cache, not your working tree. Validate one of two ways:
- Unit-test the hook directly (primary path).
python3 -m pytest plugins/dev-team/tests/hooks tests/hooks tests/repo -qruns the code in your working tree immediately. - End-to-end against a live session. Re-run
claude plugin installto refresh the cache, then confirm the hook's side effect in a fresh session (e.g. a line in.claude/metrics/boundary-events.jsonl).
Prefer path 1; use path 2 only when the behavior can't be reproduced by invoking the hook module directly.
Releasing
Release-please manages releases from conventional commits (feat: minor, fix: patch, feat!:/BREAKING CHANGE major) — merging its release PR cuts a GitHub Release.
PR titles must be conventional (<type>(<scope>): <description>) since squash-merge uses the PR title as the commit message. If a release is silently missed, recover with a follow-up commit carrying Release-As: X.Y.Z.
Cloud sessions (claude.ai/code)
See the cloud-setup skill or docs/cloud-setup.md for running this repo in a Claude Code web/cloud session.
graphify
Knowledge graph at graphify-out/.
- For architecture/symbol/cross-file questions, run
graphify query "<question>",graphify path "<A>" "<B>", orgraphify explain "<concept>"first. - Use
graphify-out/wiki/index.mdfor broad navigation;graphify-out/GRAPH_REPORT.mdonly when those don't surface enough. - After modifying code, run
graphify update .. - Skip graphify for manifests/lockfiles,
node_modules/dist/build/coverage,.git/, directory listings, and single-file lookups — plaingrep/find/ls/Readis fine there.
In this repository3 other files it gives its agents.
- .claude/CLAUDE.mdCLAUDE.md
- cloud-setupSkill
- graphifySkill
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.

