Your first agent
Scaffold an agent, point it at your data, gate a risky tool.
agentfast new scaffolds a project from a template: a config file, a knowledge-base folder, seeded
eval cases, and a Compose file. You then replace the knowledge base with your own and adjust which
tools need a human.
Scaffold
agentfast new support --sdk langgraph
cd support-agent
Templates available today:
| Template | SDKs |
|---|---|
| support | langgraph, vanilla, crewai, claude_agent_sdk, openai_agents_sdk |
| research | vanilla |
| code | vanilla |
You get:
support-agent/
├── agentfast.yaml # model, budget, guardrails, which tools are risky
├── kb/ # your documents go here
├── evals/cases.yaml # seeded cases — the quality gate
└── docker-compose.yml
Point it at your data
Drop .md or .txt files into kb/. They're ingested and embedded on startup — no separate index
step:
cp ~/company/refund-policy.md kb/
cp ~/company/shipping.md kb/
docker compose up
The agent's kb_search tool now answers from your documents, and every answer carries a grounding
score so you can tell whether it was actually supported by what it retrieved.
Decide what needs a human
This is the part worth thinking about. In agentfast.yaml:
tool_overrides:
refund_request:
risk: high # pause the run and wait for a human
hitl_mode: suspend
send_email:
risk: high
hitl_mode: defer # queue the call, let the run continue
The two modes answer different questions:
suspend— the agent cannot sensibly continue without knowing the answer. The run pauses, checkpoints, and survives a restart. Use it for anything that moves money or is hard to undo.defer— the call is queued for approval but the run carries on. Use it when the agent has other useful work to do and the action can happen later.
Anything not listed is low-risk and executes normally.
agentFast will happily let an agent issue refunds unattended if you configure it that way. The gate is only as good as the list — decide it deliberately, with whoever owns the consequences.
Run the quality gate
agentfast eval
Runs the cases in evals/cases.yaml, scores each against your thresholds, prints a per-metric
breakdown, and exits non-zero if anything is below bar — so it works as a CI step without any
further wiring. See Evals for how the judge avoids grading its own homework.