intake.yaml
intake.yaml controls what files work without anyone typing kraft item create: auto-intake, the autonomous pickup from beads, and schedules.
enabled: false
interval_s: 300
repos: [] # empty means every enabled repo in repos.yaml
priority_ceiling: 2 # P0 and P1 are left for a person; P2 and higher numbers are picked up
schedules: [] # cron-fired work items; see below
| Field | Type | Default | Meaning |
|---|---|---|---|
enabled | boolean | false | Turns autonomous pickup on. |
interval_s | integer | 300 | Seconds between polls. |
repos | list | [] | Repo paths to poll. Empty means every enabled repo in repos.yaml. |
priority_ceiling | integer | 2 | Issues with a priority number below this (P0, P1) are left for a person. P2 and higher numbers start unattended. |
schedules | list | [] | Cron entries that file a paused work item each. The fields are in Inbound triggers. |
max_concurrent is not a field of this file. It is in policy.yaml and limits how many items run at once, whichever way they were started. Before 2.0, max_concurrent was set here. A file that still has it loads, the key is ignored, and kraft admin doctor names the move.
What pickup does
When enabled is true, Kraft polls bd ready, the ready list of the optional beads issue tracker, for each repo in repos (or every enabled repo when repos is empty). It files each ready issue that passes the checks below as a work item, and starts it.
Kraft passes over a ready issue when:
- It has no integer priority.
- Its bead id already has a work item.
- It is an epic.
- Its priority number is below
priority_ceiling(P0 and P1 at the default). - The
max_concurrentslots, which every active item takes, are full. - The daily dollar cap in policy.yaml is reached.
- It cannot be filed or started: the chain has no gate, there is no valid chain or library, or filing fails. The poll records this as
invalid_config.
An item it starts behaves like this:
- Unlike an item you file by hand, it does not land paused.
- It goes through the same intake checks, and no gate is skipped.
- It runs to its first gate and stops there and waits for you, exactly as a typed-in item does.
- Kraft refuses to auto-start a chain that has no gate at all.
Edit and reload
You can edit the file by hand or in Settings › Auto-intake. Settings applies a change without a restart. A hand edit is picked up by kraft admin reload (or Reload in the header's apply chip), which also replaces the poller.
When the file does not load
A mistyped key, or a cron the scheduler cannot run (such as minute 61), stops intake.yaml from loading. At server start, auto-intake is then off and no schedule fires. A triggers entry left in policy.yaml still fires.
| Where | What you see |
|---|---|
| Settings › Auto-intake | The problem, on the field or schedule that holds it. The screen will not publish it. |
kraft admin reload | Refuses the file and exits 1. The auto-intake and schedules that were running keep running. /api/health reads degraded, with intake_off false. |
| A server starting on the file | Runs with auto-intake off and none of its schedules. /api/health reads degraded, with intake_off true. |
kraft admin doctor | The health row fails, and names the file. |
/api/health gives the reason under invalid_intake.
Related
- Inbound triggers: the fields of a schedule.
- Schedule or webhook work: file work on a cron.