Configuration
Configuration lives in TypeScript. heypi does not split settings between a JSON manifest and an entrypoint.
import { approval, docker, loadAgent, modelFromEnv, runHeypi, slack } from "@hunvreus/heypi";
const agent = loadAgent("./agent", {
id: "support",
model: modelFromEnv(),
runtime: docker({ workspace: "./workspace", image: "node:22-bookworm" }),
state: { dir: ".heypi" },
admin: {},
tools: {
bash: { approve: approval.command() },
write: false,
},
});
await runHeypi(agent, [
slack({
id: "company-slack",
token: process.env.SLACK_BOT_TOKEN!,
appToken: process.env.SLACK_APP_TOKEN!,
allow: { channels: ["C0123456789"] },
busy: "queue",
}),
]);Topics
- Agent: model, state, feature toggles, and agent resources.
- Runtimes: host, Docker, Gondolin, just-bash, Vercel, and Cloudflare execution.
- Tools: built-in tools, authored tools, and tool overrides.
- Approvals: policies, approvers, layouts, and failure behavior.
- Access: DM, channel, user, group, and bot allowlists.
- Conversation behavior: status, typing, reactions, queueing, steering, and events.
- Memory, attachments, and secrets.
- Scheduling and admin and audit.
Adapter credentials and platform-specific behavior live under Adapters.