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

Adapter credentials and platform-specific behavior live under Adapters.