Build with a coding agent
Bot Development Kit (BDK) projects live in files and expose structured CLI commands. A coding agent can create the project, exercise its tools, run a real turn, and inspect the result. You approve the plan and side effects while the coding agent owns the edit-and-test loop.
This page covers a coding agent working inside a checkout. To let a running agent propose changes to its own source, use the separate self-improvement extension.
Create an agent from a goal
Give the coding agent a purpose and the surfaces people will use. The
create-agent skill asks only for missing decisions, shows a file plan,
then scaffolds and verifies a small first version.
Use the BDK create-agent skill to build a PR triage agent reachable through GitHub. It should summarize failed checks, post one review comment per pull request, and include one smoke eval.
Ask it to read
skills/create-agent/SKILL.md. The
first version should stay narrow: instructions, one or two tools, the
chosen channels or connections, and a smoke eval.
Add one capability
For an existing project, name the user-visible outcome and point the coding agent at the matching procedure. It should inspect the current agent first, make the smallest change, then exercise the new path.
Examples:
Add Slack mentions and DMs to this agent. Follow the setup-slack skill, keep replies in the source thread, and verify one local mention.
Connect the private inventory MCP server with host OAuth. Keep its write tools behind a narrow server-tool wrapper.
Add a GitHub ready-for-review trigger and replay PR 42 before posting anything live.
The companion skills live under skills/: Slack,
MCP OAuth, and
GitHub. Use the capability guide for the
reader experience and the skill for the coding procedure.
Verify tools before tuning the prompt
Start with discovery, then call deterministic server tools without a model turn. If a tool returns the wrong evidence, fix the tool before changing instructions.
bdk validate --dir .bdk info --dir . --jsonbdk call inspect_pr --dir . \ --input '{"prUrl":"https://github.com/acme/checkout/pull/42"}'validate confirms the discovered project shape. info shows what the
serve host will mount. call runs the authored tool with schema
validation and exposes its real output.
Verify one end-to-end turn
Once deterministic inputs are correct, send the same request a user will. The coding agent should check the final answer and tool trajectory before declaring the capability complete.
bdk run --dir . \ --message "Is https://github.com/acme/checkout/pull/42 ready to approve?"run prints the saved trace path. Use that exact path instead of
constructing one from the session ID:
bdk trajectory --events <trace-path-printed-by-run>bdk eval --dir . --tag smokeFinish with the project's TypeScript check. BDK executes TypeScript through type stripping, so a successful turn does not prove the project type-checks.
Hand off credential-dependent checks
Project discovery, info, server-tool calls, and serve bring-up do not
need a model credential. Model turns and evals resolve
CURSOR_API_KEY, CURSOR_API_KEY_FILE,
CURSOR_SERVICE_ACCOUNT_KEY, then bdk login.
When the coding environment has none, it should complete every key-free check and hand you the exact remaining commands:
bdk run --dir . --message "<fixture prompt>"bdk serve --dir . --devbdk eval --dir . --tag smokeMissing access is a handoff boundary, not a reason to skip verification or invent a substitute result.
Improve a working agent
After one smoke turn passes, give the coding agent fixed fixtures, one success criterion, and the behavior that must not change. The hillclimb skill measures the current run, changes one lever, remeasures, and adds an eval for every kept improvement.
Hillclimb the PR triage agent on these two saved PRs. Reduce repeated reads without losing either gold finding. Keep the review JSON shape and all existing evals unchanged.
Ask it to read
skills/hillclimb/SKILL.md. Keep
creation and improvement separate: a smoke turn proves the surface
works; a measured climb proves it works better on fixed inputs.
Related
- Early-alpha migration: hand an architecture v1
migration to
bdk migrateor the bundled coding-agent skill - Quickstart: build the first agent manually
- Evals: protect behavior with regression cases
- Hillclimbing: run one measured improvement round
- Self-improvement: let a running agent propose a source change through a pull request
- CLI reference: command contracts and flags