All sections

Recipes for agents

1 min readValidated September 29, 2026
View as Markdown

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 has

Step 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 stored

The 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.