Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add commands/botpress/skills/adk-buildgit clone --depth 1 https://github.com/botpress/skillsWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/commands/botpress/skills/adk-build)<a href="https://agentmods.dev/commands/botpress/skills/adk-build"><img src="https://agentmods.dev/badge/commands/botpress/skills/adk-build.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00019 | $0.01182 |
| Opus 5 | $0.00010 | $0.00591 |
| Sonnet 5 | $0.00004 | $0.00236 |
| Haiku 4.5 | $0.00002 | $0.00118 |
Grade A, and why
adk-build scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 3d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 41 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Load the adk skill, then build the requested target immediately.
The target can be a single primitive (one file under src/, e.g. an action called calculate-discount) or a feature — a piece of bot functionality that needs several primitives wired together (e.g. a checkout flow = workflow + actions + table). The user does not need to know which it is. Decide based on $ARGUMENTS:
- If the first token is a primitive type —
action,tool,workflow,convo/conversation,table,trigger,kb/knowledge— and the description fits one file, build a single primitive. - Otherwise treat the whole argument as a feature description and decompose it into the primitives needed.
If $ARGUMENTS is empty or only a primitive type with no description, ask what the user wants to build (in outcome terms).
Workflow
-
Read context first. Read
agent.config.tsfor available integrations and models. Globsrc/and skim 1–2 existing primitives in each directory you expect to touch, to match the project's naming, file structure, and import style.Conversation handlers — read every existing one. Glob
src/conversations/*.tsand read each file'schannel:field, not just one or two of them. Build a map of<file> → <channels>. From that map:- Default rule: extend, do not add. If any existing handler routes through a channel set that overlaps with what the new behavior needs (and
*overlaps with everything; identical arrays overlap; arrays sharing any one channel overlap), the new behavior must be added to that existing handler — new turn, new tool wiring, new state field, whatever — not a new file. Two conversation handlers with overlapping channels both fire on the same message and produce ambiguous routing; this is the failure mode the user has hit before. - Only create a new file when channels are disjoint. A new conversation file is justifiable when its channel set has zero overlap with every existing handler — e.g., a Slack-only handler when all existing handlers are
webchat.channelonly. State the disjointness explicitly in the plan (step 4). - Or when the user asked for one. If the user explicitly requested a separate handler ("a dedicated triage conversation distinct from the main chat"), honor that — but still call out the channel overlap in the plan so they can confirm.
- Default rule: extend, do not add. If any existing handler routes through a channel set that overlaps with what the new behavior needs (and
-
Interview only about what, never how. Ask only outcome and behavior questions — what should this do, when should it happen from the user's perspective, what does success look like. Do not ask about schemas, return types, durability, retry policy, channel routing, storage shape, or which primitives to use — infer those from the description, existing primitives, and sensible defaults.
Examples of acceptable questions:
- "What should this do, in plain language?"
- "When should it kick in — what's the user-visible trigger?"
- "What does success look like when this is done?"
- "Should this finish on its own, or pause and wait for someone?"
- For a feature: "Is X part of this, or a separate thing?" — only when scope is genuinely ambiguous.
Ask 1–3 questions max, only when the description leaves a genuine outcome-level gap. If the description already conveys intent, skip the interview entirely.
-
Decompose (feature mode only). From the outcome, identify the primitives needed and the directories they belong in (
src/workflows/,src/actions/,src/tables/, etc.). State the decomposition explicitly in the plan — "This needs acheckoutworkflow, aprocess-paymentaction, and anorderstable because …". -
Propose a plan. List every file to create or modify (full path), the exports, and any dependencies (integrations to add, models needed,
agent.config.tsedits). For features, also describe how the primitives wire together. If the plan involves a new conversation file, include a one-line "channel-overlap check" justifying the new file (channels disjoint from every existing handler, or explicit user request) — if you can't justify it, fold the change into an existing handler instead. Wait for approval if the plan is non-trivial or touchesagent.config.ts. -
Build it. Write the files under the right
src/<dir>/paths. Use@botpress/runtimeimports. Match the conventions you read in step 1. For a feature, build the primitives in dependency order (table → action → workflow → conversation), so each file's imports resolve as it's written. For conversation behavior, edit the existing handler identified in step 1 — do not spawn a new one unless step 4's channel-overlap check explicitly justified it. -
Validate — always. Run
adk check --format jsonafter every build, no exceptions. If it reports errors or warnings, fix them in this same turn and re-run. Do not report the task done until the check passes. -
Suggest next steps. Offer
/adk-validate <name>to confirm wiring (especially for a feature),/adk-test <name>to run it once, and/adk-eval <name>to pin its behavior with assertions.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 3d ago First seen · 41 lines · 19 tokens per session scan A 4168c9afd845
adk-build is a command published in the GitHub repository botpress/skills (11 stars, last pushed 1mo ago), licensed MIT. It adds 19 tokens to every session and 1,182 once invoked, about $0.0001 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other commands, from other repositories
git
Git operations with intelligent commit messages and workflow optimization.
checklist
Generate a custom checklist for the current feature based on user requirements.
clarify
Identify underspecified areas in the current feature spec by asking up to 5 highly targeted clarification questions and encoding answers back into the spec.
specify
Create or update the feature specification from a natural language feature description.
analyze
Perform a non-destructive cross-artifact consistency and quality analysis across spec.md, plan.md, and tasks.md after task generation.
converge
Assess the current codebase against the feature's spec, plan, and tasks, then append any remaining unbuilt work as new tasks to tasks.md so implement can complete it.