Console
Added in 2.1
It runs on the machine the server runs on, and shows the statuses, words and colours of the web UI. The CLI stays as it is: the console is a third way in, not a replacement.
Open it
Run kraft console in a terminal. It refuses, with one sentence, when:
- stdin or stdout is not a terminal, such as in a pipe: it needs one to draw in;
- it runs inside a Kraft worker, where
KRAFT_WORK_ITEM_IDis set; - the server on Kraft's port is another instance, with a different run directory.
With no server answering, it opens anyway and says so on every screen.
Opening and leaving
The console notes when you quit it, in console-seen.json in the instance's
run directory. Opened again, a dim line under the top line says what moved
since then, counted from the board: since 14:02 · 2 finished · 1 needs you,
since 14:02 · nothing finished · nothing needs you when items only moved on,
or nothing changed since 14:02. It goes after a minute or at your first key.
An item restored from the archive does not count as finished. The first time you open the console there is no such line, and none when the file does not hold a time that could be true.
While it is open, an item that finishes gets one toast: ✓ merged !42 · Fix the parser, or ✓ completed · ... with no merge request. Several at once
read ✓ 3 finished.
When you quit, one plain line stays in the terminal: kraft console · 2 need you · 3 running, kraft console · nothing needs you · 3 running on their own, or kraft console · nothing needs you, and nothing is running. It is
not printed when the console ends on an error, or never reached the server.
The top line
Every screen keeps the top line. It starts with ◆ kraft, and the screen you
are on is drawn as a pill in the accent colour.
| Part | What it shows |
|---|---|
● live | The console is following the server's events; the dot brightens for an eighth of a second when one lands. A muted ● reconnecting means it is not: what is on screen stays until it reconnects. |
| Board | How many items need you (the Needs you group), in the repo the console was opened in, or in every repo after s. |
| Server | The server's health word: ok or degraded, or down with no answer. |
| Add-ons | How many add-on updates wait for you. |
| Repos | The connected repos. |
| The right end | The repo the console was opened in (all repos outside a connected one), the version in a window 100 columns wide or more, and update available when a newer release is out. |
Keys
The footer lists the keys of the screen you are on.
| Key | What it does |
|---|---|
1 to 4 | Board, Server, Add-ons, Repos. |
? | The current screen's keys that act now, then the ones every screen has. ? or Esc closes it. |
/ | The prompt, with the / typed. |
n | Files a new item through a form (see New item). |
| Ctrl+O | The output panel. |
| Esc | Back: from an item to the screen you opened it from. |
q | Back like Esc, or quit from Board, Server, Add-ons or Repos. |
| Ctrl+P | The command palette: a screen, an item by id or title (opens it), or a verb, typed at the prompt. Dark and Light switch the look; Keys opens the ? list. |
| Ctrl+Q | Quit. |
The Board
The Board lists every item in the web UI's groups and order: Needs you,
Running, Not started and Done, in one rounded panel. Each group's
name and count is a separator line inside it; a group with no rows shown
shares the next one's line, as in Not started 0 ─ Done 12 ›. Done is folded
to its count. Archived items are not shown.
Each item is one line: a bar in its state's colour, the first 8 characters of
its id, its title, what it is doing or waiting for in the web UI's words, its
chain when that is not default, and how long ago it last changed.
With every repo shown, the repo's name joins the chain; the repo and the chain
each have their own colour. A title too long for its column ends in …. In a
window under 80 columns the chain, repo and age columns drop.
The row under the cursor opens a second line under its title: its repo, its
chain (default too) and where it stands on the chain, the node it is on
marked ●.
Running work
An item whose agent, or an escalation turn, is at work has a spinner in place
of its bar, turning through · ✢ ✳ ✶ ✻ ✽. Its age column reads as every
row's does, since it last changed. A queued or waiting item is in Running
but does not spin.
One clock moves every spinner and running time, eight times a second, only while one is on screen. A spinner redraws its own cell, never the list.
A live update redraws the list without moving your place in it. If the item under the cursor goes (archived, say), the cursor moves to its neighbour.
The Board starts on the repo the console was opened in, as kraft view list
does, or on every repo when it was opened outside a connected one.
| Key | What it does |
|---|---|
j, k, ↓, ↑ | Move between items; they stop on each group's heading too. |
| Home, End, PageUp, PageDown | Jump to the first or last line, or a page up or down. |
| Enter | On Done's heading, opens or folds Done. On an item, opens it (The Item). |
a | Opens the item's Overview, where a approves its gate once you have read the document. |
r | Rejects the gate the item waits on, with a note saying what is wrong. The note is required. |
p | Pauses a running item, or resumes a paused one with an optional steer. On an agent's question, asks for your answer and resumes with it. The footer says which: pause, resume or answer. |
t | Retries a stopped item, with an optional steer. |
v | Opens or closes the peek. |
s | Every repo, or only the one the console was opened in. The top line says which. It appears only inside a connected repo. |
f | Filters by title or id as you type. Enter keeps the filter; Esc clears it. |
With nothing filed, the Board says so. When nothing needs you, one muted line under Needs you says so, and how many items run on their own. A filter that matches nothing says "nothing here for this filter".
a, r, p and t are in the footer only while the server allows them for the
selected item. Esc in their dialog sends nothing. Afterwards a toast says what
the server did, in the CLI's words: a resume that found no free slot says the
item is queued, not resumed. An approve's or a reject's toast starts with ✓. A refusal shows in the server's own words, and the
Board and the peek read again.
The peek
The peek follows the selected item under the Board's panel, in its own panel
titled with the item's id and status. It starts closed in a window under 30
rows; v opens and closes it at any size. It reads the item once the cursor
stops, not for every row passed.
| Selected | The peek shows |
|---|---|
| An item at a gate | The chain around the gate, the gate, and the start of the document it decides. When approving waits on open must-fix threads, it says how many. |
| An agent's question | The question. p answers it, and t retries when a retry is open. |
| A failed or stopped item | The reason, and t when a retry is open. |
| A paused item | Where it paused, and how long ago. p resumes it. |
| A stopped or paused item the server offers nothing for | That Kraft offers no action for it now; Enter opens it, and m there shows what it allows. |
| A blocked or queued item | The unfinished items it comes after. |
| A running item | A working line, such as ✻ implement · task 3 of 5 · 4m 12s · $0.42: where it is, how long its session has run, and its spend. Then that session's log as the agent writes it. |
| A done or cancelled item | The outcome, and the merge request when there is one. |
| A group heading, or nothing | The end of server.log, followed as the server writes it. |
The Item
Enter on an item, a, or an item chosen with Ctrl+P opens it. Esc goes back.
Its header is a rounded panel. The top two lines name the item, its repo and chain, and its status in the web UI's words, with what it has spent and when it last changed.
A running item has a working line under them, ✻ implement · task 3 of 5 · 4m 12s, without the spend the line above says. Its time is the running
session's, as the web's item page times it; with no session running, no time
shows.
A stopped item has a banner instead: the server's reason and, where the web UI gives one, the way on. Then its chain, with the node it stands on in the accent colour, and its tabs.
The tab shown is a pill in the accent colour. ← and →, Tab and Shift+Tab, or
[ and ], step through the five tabs, round the end; clicking a tab's name
opens it. The panel's edge and the footer name them ← → tabs.
j, k, PageUp, PageDown, Home and End scroll the one shown.
| Tab | What it shows |
|---|---|
| Overview | The document the pending gate decides, whole; a cut one says so at its end. Without a gate, the keys that move it on, as the peek says them, or that Kraft offers none. |
| Chain | A row per node: its mark (✓ done, ● current, ✗ failed, ↷ skipped, · not reached), name and cost and time. Enter opens a node: its passes, sessions, plan tasks or gate decisions. |
| Activity | The item's events, newest first, in the web UI's words, without the bookkeeping ones. New ones appear as they happen; End at the bottom reads earlier ones. |
| Log | The newest session's log, followed as the agent writes it, then session ended. Leaving the tab stops following. s steps to the next older session, round to the newest, when there is more than one. |
| Diff | What has landed on the branch, then uncommitted work, then untracked files and a cut diff's warning, as kraft view diff says them. It reads again when the item changes. A worktree that is gone shows the server's own words. |
The Chain starts on the node the item stands on, or the last one done. An open
node says its state; when it ran more than once, each pass, newest first, with
what sent it back and the rejection's note. Its sessions read task · attempt · status · time · cost. A running session shows the spinner and its time so far, moving each second.
A cancelled item's current node reads cancelled, the ones after it not reached.
The implementing node adds the plan's tasks, those not yet started marked so. A gate lists its decisions, or says it waits for you. A field the server does not give is left out.
| Key | What it does |
|---|---|
a | Approves the gate, for the document the Overview shows; from another tab, shows the Overview first. Offered once the document is read. Once approved, the chain's new node lights for a moment. |
r | Rejects the gate with a required note, naming the node whose agent gets it. Where the gate has a fix target before it, the node starts there; Shift+Tab reaches it to pick another. |
p, t | As on the Board. |
j, k, ↓, ↑ | On the Chain, move the cursor between nodes; in an open node, between its sessions. Home and End go to the first and last. |
| Enter | On the Chain, opens the node under the cursor; in an open node, the Log on the session under the cursor. |
| Esc, ← | In an open node, close it; the footer and the panel's edge say so. → and [, ], Tab, Shift+Tab still switch tabs. On the list ← and → switch tabs, and Esc goes back. |
s | On the Log, with more than one session: the next older one. |
m | The menu of what else the server allows now: skip, unblock, raise budget, escalate, complete, cancel, archive. |
| Menu entry | What it asks |
|---|---|
| Skip | An optional note, then passes the current node or gate without running it. |
| Unblock | Nothing: drops what the item still comes after. |
| Raise budget | The new cap in dollars, or none. An unreadable amount, or a cap at or below the spend, is refused in the dialog, which asks again. A raised cap whose retry is refused: the toast says both. |
| Escalate | What the agent should look into. |
| Complete | A required reason. Its beads stay open: kraft item complete ID --close-beads closes them. |
| Cancel item | What cancelling stops and keeps, then a required reason. The worktree and branch stay. |
| Archive | The console's confirm, then kraft item archive ID --yes in the output panel. |
An item abandoned while it is open says it no longer exists. One archived while open shows Archived, with no keys to act.
New item
n on any screen opens a form that files a work item, as kraft item create
does.
| Field | What it takes |
|---|---|
| Title | One line, as the Board shows it. Required. |
| Description | The brief the spec is written from. Enter starts a new line. |
| Repo | Starts at the repo the console was opened in. Left empty, Kraft uses the repo of the console's directory. |
| Chain | Left empty, the repo's default chain. |
| Spec, Plan | A file inside the repo, relative to the console's directory. Each skips the node that would write it. |
| After | The ids of items this one comes after, separated by spaces. Started before they complete, it waits as blocked. |
| Auto-gate | On: an agent reviews the item's auto-escalate gates before you do. |
| Start now | Off: the item is filed paused. On: it starts, or queues for a free slot. |
Enter in a one-line field, or File, files it. When Kraft refuses, as
for a spec outside the repo, the reason shows under the fields and the form
stays open. Esc or Back closes it. A toggle shows ✓ when on and ·
when off.
Once filed, the item opens. A toast says where it stands, and repeats any
warning Kraft gave, such as an open item with the same title. The item is
paused unless you chose Start now: p starts it, and Cancel item in
its m menu drops it.
The Server screen
2 or /admin opens it, in a panel titled Server. Its first lines say how
the server is, from the answer kraft admin health reads and from the release
feed. Under them, after a server.log separator, the log follows as the server
writes it, with WARNING in the warning colour, ERROR and CRITICAL in the
error colour, and each record's source file dimmed.
| Line | What it shows |
|---|---|
| The first | The health word, the version the server runs, with a newer release or an installed one a restart finishes, then how long it has been up, its pid and its address. |
| Config | ✓ or ✗ for the template library, policy.yaml and intake.yaml. What failed is listed under the summary, in the server's words. |
| Index, Storage, Add-ons | The search index's state, worktree disk use against the limit, and how many add-on updates wait for you. |
While the server does not answer, its last answer stays and the first line
says no answer.
| Key | What it does |
|---|---|
d | Runs kraft admin doctor in the output panel. |
l | Reloads the template library, policy.yaml and intake.yaml, as kraft admin reload does, and says what it took and what it refused. |
R | Restarts the server, after a confirm that lists the running items whose agents the restart ends. The dot reads reconnecting until the server is back. |
U | Installs the newest release and restarts the server on it (kraft admin update --restart), after the same confirm. |
f | Filters server.log by text as you type. Enter keeps the filter; Esc clears it. |
j, k, PageUp, PageDown, Home | Scroll the log. Scrolled up, it stays where you are; End follows it again. |
After an update that installed a new version, a banner says so until you restart the console, which still runs the version it started on. With no server answering, Start server starts one (see When it cannot reach the server).
Add-ons
3 or /addon lists, in a panel titled Add-ons, each collection Kraft
knows and where it comes from.
With none added, it says what add-ons are and that m adds a collection.
Under it are the add-ons it published when last fetched, and any installed
from it.
| An add-on shows | When |
|---|---|
not installed | The collection publishes it and this instance does not have it. |
Its version, enabled or disabled | It is installed. An enabled one Kraft left out also says why. |
auto-update (addon) or (collection) | It updates itself, by its own setting or its collection's. |
update waiting | A newer version waits for your review. |
| Key | What it does |
|---|---|
j, k | Move between collections and add-ons. |
i | Installs the selected add-on, after its review. |
u | Updates the selected installed add-on, after its review. With nothing new it says current. |
e | Enables or disables the selected add-on. |
d | Uninstalls the selected add-on, after a confirm. Kraft refuses while a chain or repo still uses it. |
m | A menu: add a collection, or remove the selected one. For a collection fetched from git, and its add-ons, also auto-update on or off, and fetching its catalogue. |
e, d and m each run their kraft admin addon verb in the output panel,
which says what it did, and the list is read again after. /admin addon validate is a typed command only.
The review is what kraft admin addon install and update print: the old and
new version, what it can reach, and what it contains. Back has the
focus. Apply takes it, and the running server loads it. Quitting with a
review open answers it Back. A long review scrolls: Tab from Back reaches
it. After a kraft admin update that installed a new Kraft, i and u stay
closed until you restart the console.
Repos
4 or /repo lists every repo Kraft has, as kraft repo list --all does, in
a panel titled Connected repos with c connects one on its edge.
* marks the repo the console was opened in. Under each name and path are its
test and setup commands: not set when nothing is decided yet, none when
it was declared empty.
| Key | What it does |
|---|---|
j, k | Move between repos. |
c | Connects a repo through a form: its path, starting at the current directory, and the test and setup commands Kraft proposes for it. Enter in the path reads it again. |
d | Disconnects the selected repo, after a confirm. Kraft refuses while the repo has an open item, paused ones included. |
The form runs kraft repo connect in the output panel, which says what it
saved. A command you leave as proposed is not passed, so the proposal stands
whole. Verify also runs both commands once in a throwaway worktree; x
in the output panel stops it. The repo's .kraft/ library is not offered
here: /repo library reviews it.
The prompt
Every kraft verb runs from the prompt at the bottom of every screen, a framed
line that starts with ❯. Type it with or without the leading /, and with
or without kraft, so a command the CLI printed can be pasted back as it is:
/item resume a91c and kraft item resume a91c do the same.
While it is empty, it says what this screen takes: on the Board,
a approve · r reject · /command…; on an item, /item … for this item, or esc, since an /item verb typed there with no id acts on that item, as
/item pause does; elsewhere /command….
| Key | What it does |
|---|---|
| Enter | Runs the command in the output panel. |
| Tab | Completes a group, a verb, a flag, or an item id where the verb takes one. With several choices, it completes what they share and lists them. |
| ↑ | The commands you ran since the console opened. |
| Esc | Clears the prompt and hands the keys back to the screen. |
The footer names these while the prompt has the focus: esc leave,
tab complete, ↑ previous.
The status line
Under the prompt, one line says how things stand, from the server's own answers. Each part is read when the console reaches the server, and again whenever it reconnects. A part whose read fails is left out.
| Part | What it shows |
|---|---|
✻ 2 running on their own | How many items in Running the Board shows, or nothing running. The spinner turns while an agent is at work. |
$4.10 of $50.00 today | What this instance has spent since local midnight, against the daily cap; $4.10 today with no cap. Read again when a session ends. |
claude ● codex ○ +5 | The agents whose CLI the server finds on its path (●) or does not (○), found ones first, three at most. |
? keys | In a window under 80 columns, where the footer is hidden. |
A narrow window drops the agents first, then the spend. With no server, the
line keeps only ? keys.
Typed commands
A group on its own opens its screen: /admin the Server screen, /repo
Repos, /addon Add-ons, /view and /item the Board. /view watch opens
the Board too.
Some commands are refused, with a sentence saying why:
| Typed | Why |
|---|---|
kraft, /admin start | The server would run inside the console and stop when it quits. /admin start --detach starts it on its own. |
/admin mcp, /admin permission-hook | They talk to an agent or a harness, not to you. |
/console | You are in it. |
/view logs -f, /view events -f | Following arrives with the Item screen. Leave out -f to print what is there now. |
/admin update never passes -y, even when you type it, so the refusals it
would otherwise skip still show.
The output panel
Each command runs as its own kraft process, and the output panel opens above
the prompt to show it: the command, everything it prints as it prints it, and
its exit code, in red when it is not 0. The panel keeps every command you ran
since the console opened.
| Key | What it does |
|---|---|
x or Stop | Stops the running command, as Ctrl+C would in a terminal, so it cleans up after itself. |
| Esc | Closes the panel. The command keeps running; Ctrl+O shows it again. |
One command runs at a time. A command has no terminal to ask you anything on, so one that would ask goes on without asking or stops with its own refusal. Quitting the console stops a running command, and kills it if it has not stopped within three seconds.
Confirms
Before a command that cannot be undone, the console asks first. Back has the focus, so Enter alone never goes on, and Esc answers Back. The other button names the command: Restart, Stop, Update, Disconnect, Cancel item, Archive, Abandon or Uninstall.
| Command | What the question adds |
|---|---|
/admin restart, /admin stop, /admin update --restart | The running items whose agents the stop ends. |
/admin update, /repo disconnect, /item cancel, /admin addon uninstall | What going on does. |
/item abandon --reason "..." --yes, /item archive --yes | What is lost. Without --yes they only preview, so nothing is asked. |
R and U on the Server screen ask the same as /admin restart and
/admin update --restart, d on Repos the same as /repo disconnect, and
d on Add-ons the same as /admin addon uninstall.
Small windows
The console is laid out for 80 columns by 24 rows. Under 30 rows, panels give
up their top and bottom edges, so each title becomes a rule, and the prompt is
one line: the rows go to the work. Narrower than 80 columns, the footer goes
and the status line names ? keys, so it still works as a side pane. Smaller
than 60 by 16, it shows "make the window larger" until the window grows.
When it cannot reach the server
| It says | What it means |
|---|---|
No server at 127.0.0.1:8765. | Nothing answers on Kraft's address. Start server, focused, runs kraft admin start --detach; the console follows the server as soon as it answers. The button is not offered for a server on another host. |
The server could not show the board: 500: ... | The server answers, but three reads of the board in a row failed. The rest is the server's own words. The console keeps trying. |
The server refused this machine's token (run/mcp-token). | A server answers but does not accept the token the console read from run/mcp-token in its KRAFT_HOME. Check that both use the same home. |
● reconnecting | The event stream dropped, as it does while the server restarts. The console tries again, then reads the board afresh. |