Agents as code, not as canvases.
Define agents in TypeScript or Python with typed tools, durable memory and plans you can read in a diff. Run them locally against real adapters or recorded fixtures.
- Typed tools with zod or pydantic
- Durable, resumable runs
- Local runtime with hot reload
import { agent, tool, z } from "@clawsseum/forge";
import {
anthropic, openai, zendesk, stripe, slack,
} from "@clawsseum/armory";
const refund = tool({
name: "issue_refund",
input: z.object({
chargeId: z.string(),
amount: z.number().positive(),
}),
sideEffect: true, // Gate pauses for approval
run: (args, { adapters }) =>
adapters.stripe.refunds.create(args),
});
export default agent({
name: "support-resolver",
model: anthropic("claude-sonnet-5-5"),
fallback: [openai("gpt-5")],
adapters: [zendesk(), stripe(), slack()],
tools: [refund],
});