adk-build

adk-build is a command for coding agents from botpress/skills. It costs 19 tokens per session (1,182 once invoked), scanned A, original, MIT.

A command that builds a new ADK bot component or a feature made from several components. ADK is an agent development kit; its components can include actions, tools, workflows, conversations, tables, triggers, and knowledge bases.

In plain words
What is it for?
Use it to create a single bot component or build features such as a checkout flow, while matching the project’s existing configuration, naming, and code style.
Why use it?
It helps turn an outcome described in everyday language into the right files and connections, even when the user does not know which component type is needed.

Command

Part of the adk plugin — 6 skills, 12 commands shipped together

Install

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.

agentmods
npx agentmods add commands/botpress/skills/adk-build
Clone the repo
git clone --depth 1 https://github.com/botpress/skills

Or install adk, the plugin that ships this one along with the rest of its 6 skills, 12 commands.

Wrote 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.

agentmods badge for adk-build

README.md
[![agentmods](https://agentmods.dev/badge/commands/botpress/skills/adk-build.svg)](https://agentmods.dev/commands/botpress/skills/adk-build)
Your own site
<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>
Per session 19 Only the description is in the session, so the agent can decide to use it. The body loads when it is invoked.
When invoked 1,182 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

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.

ModelPer sessionOnce 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

Measured 3d ago against content hash 4168c9afd845, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

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.

commands/adk-build.md · 41 lines

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

  1. Read context first. Read agent.config.ts for available integrations and models. Glob src/ 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/*.ts and read each file's channel: 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.channel only. 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.
  2. 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.

  3. 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 a checkout workflow, a process-payment action, and an orders table because …".

  4. Propose a plan. List every file to create or modify (full path), the exports, and any dependencies (integrations to add, models needed, agent.config.ts edits). 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 touches agent.config.ts.

  5. Build it. Write the files under the right src/<dir>/ paths. Use @botpress/runtime imports. 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.

  6. Validate — always. Run adk check --format json after 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.

  7. 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.

Read the full file on GitHub · 41 lines

Changes

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.

  1. 3d ago First seen · 41 lines · 19 tokens per session scan A 4168c9afd845

Subscribe to this mod's changes

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.