All sections
Recipes for agents
The two setups people actually want, written as the sequence of tool calls that completes them. Neither needs a dashboard and neither needs you to paste a credential into a conversation.
Give my app a database #
1. kraftify_ceiling()
2. kraftify_create_target(name: "app-db", kind: "postgres", size: "small")
3. kraftify_set_env(target: "app-db", key: "DATABASE_URL")
4. run your migrations against the connection string the agent already hasStep 3 is the one people leave out. Skip it and the app has a database it cannot reach.
Host the multiplayer game I just wrote #
1. kraftify_create_target(name: "my-game", kind: "minecraft", size: "medium")
2. kraftify_start(target: "my-game")
3. kraftify_logs(target: "my-game") # streamed, never storedThe same three calls, the same ceiling, the same approval behaviour. That is the entire claim of the product: a database and a game server are two rows in one list, and an agent does not need to know which is which.
Put something else in a box #
1. kraftify_create_target(name: "api", kind: "container", size: "small")
2. kraftify_start(target: "api")Rules worth giving an agent #
- Start read-only. Five tools, no writes, and you can see what the agent can see before it can do anything.
- Let it read the ceiling. An agent that knows the cap can tell you when a request is too big instead of discovering it by failing.
- Do not give it
tokens:write. A token that can mint tokens is an agent that can outlive your session. - Do not give it console write. We do not expose it, and that is not an oversight.
If a routine runs unattended, pre-approve only the read-only tools it needs. A routine that cannot ask for approval should stop and report a recommendation rather than attempt a write.