A reusable PM → Architect → Coder → Tester pipeline for Android projects,
working identically in Claude Code and
Antigravity. Distributed as per-file symlinks
into each consuming project — no whole-dir symlinks, no forced migration
of your existing .claude/ or .agents/ content.
Once installed in a project, open it in Claude Code or Antigravity and run a
slash command from the chat prompt. The build-* commands run the full
pipeline end to end (the suffix tells you whether a human is in the loop, and
whether automated reviewers gate each phase); the two plan-* commands run just
one early phase and stop, so you can research or design without committing to a
build.
Human-in-the-loop variant. PM → Architect → Coder → Tester with approval gates between phases. Use when the idea is rough and you want the PM to refine it before any code is written.
/build-guided add a recently-played carousel to the home screen
The PM agent turns that into a concrete feature spec at
pipeline_artifacts/<slug>/feature.md and pauses for your sign-off. After
you approve, the Architect produces an implementation plan, the Coder
implements it, and the Tester verifies — each phase stops for review.
Fully automatic variant. Architect → Coder → Tester, no gates. Use when the feature is already specified.
/build-auto add a "Save draft on background" hook to ComposeViewModel that persists the current input to Room every 2s and restores it on launch
The Architect writes the plan, the Coder implements it, the Tester runs
verification on a device via the auto-mobile MCP server. Artifacts for
every run land under pipeline_artifacts/<slug>/.
Same shape as /build-auto (no PM phase, no human gates), but each producing
phase is followed by an automated reviewer that can send the work back. Use when
you want a higher-quality unattended run and are willing to spend more tokens for
it.
/build-auto-reviewed add a "Save draft on background" hook to ComposeViewModel that persists the current input to Room every 2s and restores it on launch
The Architect writes the plan, then @adt-android-architect-reviewer reviews
it; the Coder implements, then @adt-android-code-reviewer reviews the diff. On
each gate, if the reviewer requests changes, the producing agent is re-run with
the feedback — at most twice per gate. If a reviewer still isn't satisfied
after the second re-run, the pipeline stops and reports rather than shipping
work the reviewer rejected. A clean run then hands off to the Tester as usual.
When you want a plan but not a build, run just one phase — each runs a single phase, stops after writing its artifact, and works identically in Claude Code and Antigravity. Their output chains into a build command (or each other) later.
Runs only the PM. Turns a rough idea into a concrete, unambiguous feature spec
at pipeline_artifacts/<slug>/feature.md, asking clarifying questions along
the way — then stops.
/plan-research add a recently-played carousel to the home screen
Feed the resulting feature.md to /plan-design, /build-auto, or
/build-guided when you're ready.
Runs only the Architect. Produces an implementation plan at
pipeline_artifacts/<slug>/implementation-plan.md from either a feature.md
(e.g. from /plan-research) or a clear feature description — then stops.
/plan-design pipeline_artifacts/recently-played-carousel/feature.md
Feed the resulting plan to /build-auto or /build-guided to implement and
verify it.
Two paths:
- Claude Code plugin — installable from the Claude Code CLI via the plugin marketplace. Installs the
adt-*agents and the/build-auto,/build-auto-reviewed,/build-guided,/plan-research, and/plan-designslash commands without per-project setup. Does not wire up Antigravity (no.agents/workflows/files, noagents.mdpersona stubs, no.gitignoreblock). - install.sh per-project (local repo install) — works for both Claude Code and Antigravity. Materializes per-file symlinks inside each consuming project, manages a
.gitignoreblock, and inlines persona stubs into.agents/agents.mdfor Antigravity. This is the only supported path for Antigravity — Antigravity has no plugin marketplace.
The two are not mutually exclusive — you can install the plugin in Claude Code and still run install.sh in Antigravity projects.
From inside the Claude Code CLI:
/plugin marketplace add jaxvy/agentic-dev-team
/plugin install agentic-dev-team@adt-pipeline
Claude Code will prompt for an install scope:
| Scope | Storage | Committed to git? | Behavior |
|---|---|---|---|
User (Install for you) |
~/.claude/ |
No | Plugin available in every Claude Code session on your machine. |
Project (Install for all collaborators on this repository) |
.claude/settings.json in the repo |
Yes | Anyone who clones the repo and runs claude is prompted to install. |
Local (Install for you, in this repo only) |
.claude/settings.local.json in the repo |
No (gitignored) | Plugin active only in this repo, only for you. |
After install, /build-auto, /build-auto-reviewed, /build-guided, /plan-research, /plan-design, and the six @adt-* agents are available. To update, run /plugin marketplace update adt-pipeline. To remove, /plugin uninstall agentic-dev-team@adt-pipeline.
If you also want Antigravity support, additionally follow the install.sh path below — they coexist without conflict.
git.- A Claude Code or Antigravity install.
- An Android project with an
AGENTS.mdorCLAUDE.mddescribing the app's stack, architecture, conventions, and verification rules. The pipeline agents look for either file. - auto-mobile MCP server (kaeawc/auto-mobile)
installed and registered with your tool. The
adt-android-testeragent drives the running app on a device/emulator through this MCP — without it, the Tester phase of/build-guided,/build-auto, and/build-auto-reviewedcannot complete its device-verification step.
Clone this repo to a stable location on your machine. The path is a suggestion — pick whatever you want:
git clone https://github.com/jaxvy/agentic-dev-team.git ~/code/agentic-dev-teamFrom each Android project root, run install.sh directly from the clone:
cd /path/to/your-android-project
~/code/agentic-dev-team/install.shThe installer is completely non-destructive: it only creates symlinks
for the specific files this repo provides. Your existing .claude/ and
.agents/ content is never touched, modified, or migrated.
For each file this repo owns, install.sh creates a symlink at the matching path inside your project:
| Project path | → Symlink target (in your clone) |
|---|---|
.claude/commands/build-guided.md |
<clone>/.claude/commands/build-guided.md |
.claude/commands/build-auto.md |
<clone>/.claude/commands/build-auto.md |
.claude/commands/build-auto-reviewed.md |
<clone>/.claude/commands/build-auto-reviewed.md |
.claude/commands/plan-research.md |
<clone>/.claude/commands/plan-research.md |
.claude/commands/plan-design.md |
<clone>/.claude/commands/plan-design.md |
.claude/agents/adt-android-pm.md |
<clone>/.claude/agents/adt-android-pm.md |
.claude/agents/adt-android-architect.md |
<clone>/.claude/agents/adt-android-architect.md |
.claude/agents/adt-android-architect-reviewer.md |
<clone>/.claude/agents/adt-android-architect-reviewer.md |
.claude/agents/adt-android-coder.md |
<clone>/.claude/agents/adt-android-coder.md |
.claude/agents/adt-android-code-reviewer.md |
<clone>/.claude/agents/adt-android-code-reviewer.md |
.claude/agents/adt-android-tester.md |
<clone>/.claude/agents/adt-android-tester.md |
.claude/AGENTIC_DEV_TEAM_PIPELINE.md |
<clone>/.claude/AGENTIC_DEV_TEAM_PIPELINE.md |
.agents/workflows/build-guided.md |
<clone>/.agents/workflows/build-guided.md |
.agents/workflows/build-auto.md |
<clone>/.agents/workflows/build-auto.md |
.agents/workflows/build-auto-reviewed.md |
<clone>/.agents/workflows/build-auto-reviewed.md |
.agents/workflows/plan-research.md |
<clone>/.agents/workflows/plan-research.md |
.agents/workflows/plan-design.md |
<clone>/.agents/workflows/plan-design.md |
Two additional changes happen via marker-fenced managed blocks (not symlinks):
.gitignoregains a small block listing the symlink paths above (since the symlink targets are per-developer absolute paths and can't be committed) plus/pipeline_artifacts/..agents/agents.mdgains a block containing the inlined persona stubs from this repo's.agents/AGENTIC_DEV_TEAM.md. Antigravity auto-loadsagents.mdinto the system prompt as user_rules, so this is how Antigravity discovers the team. If the file doesn't exist, it's created. If it does exist, your existing content outside the markers is left untouched.
After install, ls -la .claude/commands/ makes ownership obvious — each
of our entries shows an -> arrow pointing at the clone. Your own files
in the same directories have no arrow.
If a real file or non-our-symlink already exists at one of our destinations, install.sh refuses with the path and a clear "rename or delete, then re-run" message. Nothing is ever overwritten silently. Pre-flight collision checks run before any symlink is created, so a refusal leaves the install in a clean state.
The canonical update incantation (run after pulling new changes in the clone):
cd ~/code/agentic-dev-team && git pull && cd /path/to/your-project
~/code/agentic-dev-team/install.shWhy both steps:
git pullrefreshes the source files in the clone. Edits to existing agent prompts, commands, orAGENTIC_DEV_TEAM_PIPELINE.mdare picked up immediately because your project's symlinks already point at them.- install.sh must run again to materialize symlinks for any newly
added files in the repo (e.g., a new agent like
adt-android-code-reviewer.md, or a new command like/build-auto-reviewed), and to clean up stale symlinks for any removed files. It also refreshes the inlined persona stubs in.agents/agents.mdfrom the latest.agents/AGENTIC_DEV_TEAM.md.
install.sh is a sync, not just an append: adds new symlinks, removes stale ones (where the source no longer exists), and rewrites the marker blocks to reflect current state.
Suggested shell function for one-shot updates across multiple projects:
agentic-dev-team-update() {
(cd ~/code/agentic-dev-team && git pull) || return 1
~/code/agentic-dev-team/install.sh
}From the project root:
~/code/agentic-dev-team/install.sh --uninstallThis removes only what install.sh created:
- Every symlink whose target resolves into the clone.
- The marker-fenced block in
.gitignore(your other gitignore entries are preserved). - The marker-fenced block in
.agents/agents.md(and the file itself if it ends up empty).
Your own files, content outside the markers, and the clone at
~/code/agentic-dev-team are all untouched.
This repo is a shared configuration package, not a library you import.
Each Android project that wants the pipeline links this repo's files into
its own .claude/ and .agents/.
The mechanics:
- Per-file symlinks, not per-directory. Your project's
.claude/and.agents/stay real directories. You can keep adding your own commands/agents alongside our symlinks — they coexist freely. - Claude Code discovery. Claude Code scans
.claude/commands/and.claude/agents/in the project by filename. Our symlinks live at those canonical paths, so/build-auto,/build-auto-reviewed,/build-guided,/plan-research,/plan-design,@adt-android-pm,@adt-android-architect,@adt-android-architect-reviewer,@adt-android-coder,@adt-android-code-reviewer, and@adt-android-testerare all available automatically. - Antigravity discovery. Antigravity scans
.agents/workflows/for slash commands (our workflow files there are symlinks into.claude/commands/via the clone) and auto-loads.agents/agents.mdinto the system prompt as user_rules. install.sh inlines the persona stubs from.agents/AGENTIC_DEV_TEAM.mdinto a marker-fenced block inside youragents.md, so Antigravity sees them in-context without needing to load another file. The HTML-comment markers (<!-- agentic-dev-team:start -->/<!-- agentic-dev-team:end -->) are ignored by Antigravity. - Cross-tool source of truth. Both tools end up reading the same
agent prompts and the same
.claude/AGENTIC_DEV_TEAM_PIPELINE.mdfor orchestration rules. Edits to those files in the clone propagate to every consuming project on the next file read — no install required for in-place edits. .gitignoreblock. Symlink targets are per-developer absolute paths (~/code/agentic-dev-team/...) and would not resolve on a teammate's machine, so install.sh manages a small block in.gitignorelisting them.
For maintainers / contributors who want to add new agents or commands:
- Adding a new agent. Create
.claude/agents/adt-<name>.mdin this repo (always use theadt-prefix to stay collision-free with developers' own agents). Add a short stub block to.agents/AGENTIC_DEV_TEAM.mdusing the@adt-<name>handle and referencing the new prompt. On the nextinstall.shrun in each consuming project, the new agent becomes invocable as@adt-<name>and the persona-registry block inagents.mdautomatically updates with the new stub. - Adding a new command / workflow. Create
.claude/commands/<name>.mdwith the orchestration prompt. Create.agents/workflows/<name>.mdas a symlink to../../.claude/commands/<name>.mdso Antigravity sees it too./build-auto-reviewedis built exactly this way: its workflow symlink points at the command, which orchestrates the two reviewer agents between the existing phases. - Updating shared orchestration rules. Edit
.claude/AGENTIC_DEV_TEAM_PIPELINE.md. Because agent prompts reference it by path and the project's copy is a symlink into the clone, edits propagate the next time an agent reads the file — no install needed. - Removing or renaming files. Just delete or rename in the repo. install.sh's sync logic removes stale symlinks from consuming projects on the next run.
Every adt-* agent reads the consuming project's AGENTS.md or CLAUDE.md
(whichever exists) for project-specific context: stack, architecture,
conventions, and verification rules. The pipeline agents look for either
file automatically — you don't need to document the pipeline itself in it.
- "install.sh refused with 'real file at X'" — you have your own file at one of our install paths. Rename or delete one side, then re-run.
- "I pulled the repo but new commands aren't showing up" — run
install.shin the project again;git pullalone doesn't materialize symlinks for newly added files. - "I see a broken symlink in
.claude/agents/" — likely a file was renamed or removed in the repo. Runinstall.sh; the sync removes stale symlinks. - "Both AGENTS.md and CLAUDE.md exist as real files" — the pipeline agents will read whichever they find first. For consistency, pick one as canonical and keep them in sync (or delete one).