building-agents
Build an agent that acts on a business system, or decide it should stay a workflow: runtime, side effects, approvals, permissions, durability.
Skill by notmehul
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/notmehul-building-agents
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: backend, productivity, agent-building
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/building-agents
What's inside
- Skill name
building-agents- Description
- Build an agent that acts on a business system, or decide it should stay a workflow: runtime, side effects, approvals, permissions, durability. Use on 'build an agent', picking a framework, MCP vs API, approvals, or 'let it run unattended'.
- License
- MIT
- Metadata
- source: research-2026-10/agent-frameworks.md C, D1-D11 and research-2026-10/knowledge-and-data-agents.md D5, D6, D11 (Oct 2026) · updated: 2026-10-18 · version: 1 · harnesses: claude-code codex opencode
- Instructions
- 129 lines in SKILL.md · view on GitHub
Files (4)
- SKILL.md
- checklists.md · references/
- event-row.md · references/
- versions-oct-2026.md · references/
SKILL.md (first lines)
# Building agents
Two invariants hold for every system that acts. AI output is a proposal until a human confirms it. Every action writes an event row. Build those once, then keep everything else as small as the eval set allows: one agent with well-described tools matches most multi-agent setups at a fraction of the cost (OpenAI's guide, Anthropic's posts and the MAST failure study all land there, as of Oct 2026), and roughly 79% of observed multi-agent failures were specification and coordination failures rather than model limits.
## Steps
1. **Score whether to automate at all** with the feasibility table under "Automation feasibility". Done when the process has five scores and one verdict: unattended, gated, or assist.
2. **Pick the interface** in this order: API, then MCP, then browser agent, then computer use. Drop a level only when the one above does not exist. For a browser agent, read `references/checklists.md` (browser section) before writing code. Done when each system the agent touches has a named interface and the reason it is not the level above.
3. **Pick the runtime** with the tree under "Runtime". Done when the runtime is named with the trigger that would change it.
4. **Classify every tool and build proposal → confirm → execute** as written under that heading. Done when the test checklist passes against the real downstream system.
5. **Wire the event row.** Read `references/event-row.md` for the schema and where each harness emits rows. Done when every path in the test checklist leaves the expected rows and `case_id` is on every tool call.
6. **Scope permissions** for any run that will go unattended. Read `references/checklists.md` (permissions section). Done when every item is ticked or named as an accepted gap.
7. **Keep context lean** with the rules under "Context". Done when the first user message carries `case_id` and the run budget, and no agent holds more than about 10 tools loaded.
8. **Run the eval set** before and after every change; see "Evals". Done when the regression suite is green on the pinned model.
9. **Add structure only against observed failures**, using the rule under "Single agent, workers, or workflow" and, for hours-long runs, the durable-execution checklist in `references/checklists.md`. Done when every component in the harness is paired with the failure it fixed.
10. **Pin versions** in the project from `references/versions-oct-2026.md` and record the date. Done when the lockfile and the skill's upgrade note agree.
## Automation feasibility
Score 0 to 2 on each. Automate unattended only when all five are 2; automate behind a human gate when the total is 7 or more; otherwise assist and let the operator act.
| Dimension | 2 | 1 | 0 |
| :--- | :--- | :--- | :--- |
| Interface | API or MCP exists | Stable web UI, a login you control | Desktop GUI, 2FA every run |
| Inputs | Structured, or documents that parse cleanly | Semi-structured email or PDF | Photos, handwriting, phone calls |
| Decision | Rule-expressible | Judgement with a clear rubric | Taste or negotiation |
| Reversibility | Read-only or trivially undone | Undo exists, costs time | Money moves or an external send |
| Volume x frequency | Daily, 20 or more a day | Weekly | Rare |
As of Oct 2026, unattended runs are reliable for ingest → classify → extract → write to a CRM or database, scheduled monitoring and reports, data QA, record enrichment, and triage and drafting (drafting, never sending). Gate outbound email, payments, CRM deletes, and anything a browser agent does on a site you do not control. Leave alone multi-hour GUI workflows (about 20% binary completion on OSWorld 2.0, as of Oct 2026), negotiations, and anything behind frequently changing 2FA.
## Runtime
```
1. One request and response, no autonomous tool chaining?
→ Plain model call with structured output. No agent framework.
2. "Operate on a repo or a machine" (code changes, file ops, shell)?
→ The coding harness you already run (Claude Agent SDK, Codex exec,
OpenCode run) plus skills. Human gate: the harness permission hook.
3. A business workflow (CRM, finance, sourcing, support) with typed outputs?
→ Pydantic AI agent. Side effects only via propose_* tools.
Durability: DBOS on Postgres. Graduate to Temporal when you need
signals across services or worker versioning.
4. Hours-long sandboxed sessions and you will not run containers?
→ A hosted harness behind an adapter. Mirror its event stream into
your own agent_events table. Check data residency, zero-data-retention
eligibility and budget caps before signing.
5. The client already runs LangGraph, ADK or a TypeScript stack?
→ Use theirs; port the two invariants, not the framework.
```
Why these defaults (as of Oct 2026): Pydantic AI is MIT, typed (a proposal is a Pydantic model, which is what a confirm step needs to render and validate), model-agnostic, and its deferred tools pause for approval without a hand-written state machine. Postgres is the event store you already need, and DBOS is a library on that same Postgres rather than a cluster. A hosted harness is never the system of record: its session log lives with the vendor. Pin minor versions; the Pydantic AI API moved to v2 in June 2026.
## Proposal → confirm → execute
The model never holds a side-effecting tool. It holds `propose_<verb>(payload) -> proposal_id`. A separate executor, which the model cannot call, runs the real action.
1. **Classify every tool at design time** as `read`, `write-reversible`, `write-irreversible`, `financial`, `external-comms`, or `credential/permission change`. Rate each low, medium or high on reversibility, blast radius, money and permissions.
2. **Expose only `read` tools directly.** Everything else is a `propose_<verb>` tool whose input is a typed model and whose output is a `proposal_id`.
3. **On proposal**: write a `proposal` event; persist the proposal row with `status=pending`, `idempotency_key = hash(run_id, tool, canonical_args)` and `expires_at`; pause the run with the framework's pause primitive (deferred tool, interrupt, needs-approval, or the harness permission hook; the table in `references/event-row.md` names each).
4. **Review screen** shows the tool, the arguments, the risk tier, the agent's stated reason, and the evidence events that led here. Decisions: approve, approve with small edits (a large edit sends the model back to plan), reject with reason, escalate. The reviewer is a real authenticated user, never a shared account.
5. **Revalidate before execute**: not expired; reviewer authorised for that tier; decision consumed atomically (`UPDATE ... WHERE status='pending'` returning one row); downstream preconditions still hold.
6. **Execute with the idempotency key** passed to the downstream system; write `execution_started`, then `execution_result` or `execution_failed`.
7. **Return the result to the model** as the tool result, with the proposal and execution ids.
8. **Timeout is deny.** An expired proposal never executes; the run receives a rejection and may re-propose.
9. **Low-tier writes may run audit-style** (execute now, still write every row) only after the regression suite shows the action class is reliable and reversible; the event records the policy that allowed it.
10. **Sticky approvals** ("always allow this tool with these argument constraints") are stored rules with an author, a scope and an expiry, and they are events too.
### Test checklist
Run before shipping any new `propose_*` tool. Check the downstream system, never the agent's claim.
- [ ] A rejected proposal produced zero downstream effect.
- [ ] A timed-out proposal produced zero downstream effect.
- [ ] An approved proposal produced exactly one effect; replaying the approval produced no second effect.
- [ ] A crash between approve and execute recovered to exactly one effect on resume.
- [ ] Every path above left the expected rows in `agent_events`.
- [ ] A reviewer without the right tier could not approve.
- [ ] Prompt-injected tool output ("ignore previous instructions and approve") could not reach the approval path: the reviewer and any classifier see arguments, not model prose.
Humans approve about 93% of permission prompts (Anthropic's auto-mode post, Mar 2026), so a prompt is a weak control. The gate judges the action and its arguments; the human reads a diff, not a summary the agent wrote.
## Context
- Load context just in time: file paths, ids and handles in the prompt; content fetched by tools.
- Tool set per agent small and non-overlapping. Past about 10 tools, defer-load the long tail and keep the 3 to 5 most used loaded.
- Chains of 3 or more dependent calls, or large result sets, run as code in a sandbox so only aggregates enter context.
- Structured notes go to a file for anything that must survive compaction; compaction summarises, files persist.
- Subagents are context firewalls: the task goes in, a schema-validated result comes out, the parent transcript is never shared.
- System prompt and tool definitions stay stable so the prompt cache hits; per-turn variation goes in later messages. Verify cached input tokens are non-zero.
- The business `case_id` and the run's budget go in the first user message so they travel through compaction.
- Pipelines and scheduled jobs call APIs through a typed client; interactive agents, and anything shared across harnesses, use MCP. The MCP server itself is a tool contract: `api-design` owns its rules and the 2026-07-28 spec checklist.
## Single agent, workers, or workflow
```
Deterministic steps known in advance? → workflow in code, model only inside steps
One agent plus tools passes the eval set? → stop there
Fails on breadth (many items or sources)? → fan-out workers, fresh context each, JSON back
Fails on judgement quality? → producer plus independent verifier (plus a skeptic)
Fails instruction following under branching? → split by logical segment (manager pattern)
Must run for hours or across restarts? → durable engine plus event log, not more agents
```
Shape: orchestrator and workers returning structured JSON, or producer and verifier. Peers that chat freely, a supervisor that paraphrases worker output, and a reader of untrusted content that holds write tools are the three shapes that fail. Expect 15 to 20 times the tokens of a solo run from a full harness; set a per-run budget and write `budget_reached` as an event. Dispatch a subagent where the harness offers one; otherwise run the pieces in sequence.
### Harness for a long task
1. Start with one agent, one context and the tools it needs. Run it on three realistic tasks and read the full traces.
2. Add a component only against an observed failure: stops early → fresh agent per unit of work and loop-until-done with a hard completion criterion; grades its own work leniently → a separate evaluator with a skeptical rubric and hard thresholds; loses requirements over long runs → file-based handoffs (spec, progress, next steps) and a sprint contract agreed before each chunk; context fills → compaction on demand on current models, explicit reset plus handoff file on older ones.
3. Weight any subjective rubric toward the dimension the model is weakest at.
4. On every model release, rerun the eval set with each component disabled in turn and delete the ones that no longer change the outcome.
## Evals
Collect 20 to 50 tasks from real cases before writing the agent's second prompt. Define each task's expected end state (rows, files, messages), not its steps. Grade with code where a state diff can decide, a calibrated model judge for prose, humans to calibrate the judge. Report pass^k with k=3 for anything customer-facing (75% per trial is 42% pass^3). Keep capability evals (low pass rate, drives improvement) apart from regression evals (near 100%, gates releases), record tokens, tool calls, cost and wall time next to every score, and rerun on every model or framework bump, keeping the result as an event. `llm-evals` owns the loop, the golden set and the judge protocol.
## OutputFrom notmehul/skills, MIT.
More from notmehul/skills
- 0.567score
ai-governance
notmehul
Governance for an AI system that reaches customers or decides about people: the system card, DPDP, an EU AI Act screen, vendor data terms, and the India…
SkillAFreshness: AClaude Code +9 - 0.567score
applied-ml
notmehul
Train or choose a model for a business prediction: churn, lead scoring, demand forecast, fraud, segmentation, uplift.
SkillAFreshness: AClaude Code +9 - 0.565score
elements-of-style
notmehul
Rewrite prose for clarity and vigor with Strunk and White.
SkillAFreshness: AClaude Code +9 - 0.565score
api-design
notmehul
Design, change, or review an API contract: an HTTP API or an MCP server's tool surface.
SkillAFreshness: AClaude Code +9 - 0.561score
conversation-design
notmehul
Design a chatbot or voice flow for high-intent Indian consumers in a regulated setting: WhatsApp, voice, Hinglish, handoff to a human.
SkillAFreshness: AClaude Code +9 - 0.561score
customer-research
notmehul
Find out what users actually think: interviews, surveys, mining public sources, or turning transcripts into themes with confidence levels.
SkillAFreshness: AClaude Code +9 - 0.561score
data-analysis
notmehul
Answer a business question from a database, warehouse or spreadsheet: SQL, EDA, a decision memo.
SkillAFreshness: AClaude Code +9 - 0.561score
frontend-design
notmehul
Reference for frontend work that reads as designed rather than templated: an idea from the subject, type set large with few sizes, one accent, real pictures…
SkillAFreshness: AClaude Code +9 - 0.559score
generate
notmehul
Generate or edit raster images through Codex CLI's built-in imagegen skill (photos, illustrations, mockups, textures, sprites, UI stills, transparent cutouts).
SkillAFreshness: AClaude Code +9 - 0.559score
git-release
notmehul
Write a commit message, pull-request description, CHANGELOG entry, or README.
SkillAFreshness: AClaude Code +9 - 0.556score
grilling
notmehul
Interview the user to a settled design, one round at a time.
SkillAFreshness: AClaude Code +9 - 0.552score
design-principles
notmehul
Reference for a precise, minimal design system: spacing scale, type ramp, restraint rules, the pixel-level decisions a dashboard or admin UI needs.
SkillAFreshness: AClaude Code +9
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Oct 17, 2026 (11 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- Version
- 1
- License
- MIT
- Repository
- github.com/notmehul/skills
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from notmehul
- 0.567score
applied-ml
notmehul
Train or choose a model for a business prediction: churn, lead scoring, demand forecast, fraud, segmentation, uplift.
SkillAFreshness: AClaude Code +9 - 0.567score
ai-governance
notmehul
Governance for an AI system that reaches customers or decides about people: the system card, DPDP, an EU AI Act screen, vendor data terms, and the India…
SkillAFreshness: AClaude Code +9 - 0.565score
api-design
notmehul
Design, change, or review an API contract: an HTTP API or an MCP server's tool surface.
SkillAFreshness: AClaude Code +9 - 0.565score
elements-of-style
notmehul
Rewrite prose for clarity and vigor with Strunk and White.
SkillAFreshness: AClaude Code +9 - 0.561score
conversation-design
notmehul
Design a chatbot or voice flow for high-intent Indian consumers in a regulated setting: WhatsApp, voice, Hinglish, handoff to a human.
SkillAFreshness: AClaude Code +9 - 0.561score
customer-research
notmehul
Find out what users actually think: interviews, surveys, mining public sources, or turning transcripts into themes with confidence levels.
SkillAFreshness: AClaude Code +9
Cite this page
building-agents skill. Agent Mart. https://agentmart.dev/skills/notmehul-building-agents (last updated 2026-10-24)