Skip to main content
Version: 0.13.0

Progress view

A one-shot run (a job that does one task and ends) has no prompt, but a person watching it still wants to see what's happening and to answer checkpoints. createProgressView() is the chat's screen without the prompt: the live reply, tool calls, spinner, approval panels and status bar.

import { buildSessionOptions, createProgressView, runQuery } from "@falkenslab/agent-kit";

const { options } = await buildSessionOptions(config, runDir, spec);
const view = createProgressView({ mode: config.mode, agentLabel: "Scout>" });

const run = runQuery("Update the knowledge base with the new files in sources/", options);
for await (const event of run.events) view.render(event);

await view.close(); // removes the live area and restores the interaction port
console.log("Done.");

Without a TTY, or with plain: true, it's createConsoleRenderer() (plain lines), with a no-op close().

Options​

OptionDescription
formatActionTool call labels. See Tool labels.
toolPhraseHow your tools count in a folded summary.
agentLabelThe label before the reply in plain output.
onWriteCalled with everything the console renderer writes (plain text), e.g. to mirror a log file.
renderApprovalYour own preview in the approval panels.
modeShown in the status bar.
theme, languageSee Themes and Languages.
plainPlain console output even on a TTY.

The view is a renderer​

ProgressView has the same methods as the console renderer, so code that prints events works with either:

MethodWhat it does
render(event)Draws one AgentEvent.
write(text), writeLine(text)Writes your own text (a line of its own, for writeLine).
endLine()Ends the current line if needed.
startTurn()Marks a new turn (the view starts one when created).
close()Ends the view. Await it before printing anything else.

Ctrl+C during a checkpoint answers Stop and raises SIGINT, so your own handler can stop the run:

process.on("SIGINT", () => {
void run.interrupt();
run.close();
});

The plain console renderer​

createConsoleRenderer() prints events as plain lines: the agent's text as it streams, [action] <label> per tool call, notices and errors. runChatTui() uses it, and so does the session log.

import { createConsoleRenderer, runQuery } from "@falkenslab/agent-kit";

const renderer = createConsoleRenderer({ agentLabel: "Scout>", onWrite: (text) => log.write(text) });
const run = runQuery("Summarize the notes", options);
for await (const event of run.events) renderer.render(event);
renderer.endLine();

output replaces where the text goes (standard output by default). Subagent actions, tool results and prompt suggestions aren't printed.