Build with Syntic CodeAgents and parallel workThe agents view

The agents view

When several agents work for you at once, you need one place to see them. Syntic Code has two:

  • The agents dashboard (syntic agents) is a full-screen list of every background session on your computer, across all projects. Use it from any terminal to check on long jobs, read their logs, step into one, or clean up.
  • The in-session agents view (← on an empty prompt, or /tasks) lists everything working for the session you are in: the main conversation, its subagents and the background work it started.

Quick start

syntic --bg "upgrade the test suite to the new fixtures API and get it green"
syntic --bg "write docs for every public function in src/export"
syntic agents
 STATE     ID        PROMPT                                     FOLDER          STARTED   COST    TOKENS
› running  08e14168  upgrade the test suite to the new fixtur…  ~/code/shop     4m ago    $0.38   212.4k
  finished 5c1d0a2e  write docs for every public function in …  ~/code/shop     3m ago    $0.21   96.0k

Select a row and press Enter to continue that session yourself, or l to read its log.

The agents dashboard

syntic agents opens the dashboard. It re-reads the list every two seconds, so new runs and state changes appear on their own.

What each row shows

ColumnMeaning
STATErunning, finished, failed, stopped, interrupted or needs input. A run whose process vanished without finishing shows as failed.
IDThe run’s short id. Any unique prefix works in the shell commands.
PROMPTThe start of the task you gave it.
FOLDERWhere it was started.
STARTEDHow long ago it began.
COST, TOKENSWhat it has used so far, read from its saved conversation.

The state meanings are on Background sessions.

Keys

KeyDoes
↑ ↓ (or k j), Home, EndMove the selection.
Enter or aAttach: leave the dashboard and open that session in the interactive screen, so you can continue it.
l or →Open the run’s log.
sStop the selected run. You confirm with y; it is asked to stop, then forced after a few seconds.
pPrune: remove every finished, failed and stopped run and its log, after a y to confirm. Running sessions are never removed.
rRefresh now.
q, Esc or Ctrl+CClose the dashboard.

In the log view:

KeyDoes
↑ ↓ (or k j), PgUp, PgDnScroll. The view follows new output until you scroll up.
End or GJump back to the newest output and follow it.
a or EnterAttach to this run.
sStop this run.
Esc, q, ← or lBack to the list.

Options

OptionDoes
--cwd <path>Only runs started in that folder or below it.
--jsonPrint the runs as JSON and exit, for scripts and status bars.
--listList your custom agent definitions instead of the dashboard.

When syntic agents is not run in a terminal (piped, or in a script), it prints the agent definitions, the same as --list.

Read the list from a script

syntic agents --json | jq -r '.[] | select(.state == "needs-input") | .id'

Each entry has these fields:

FieldMeaning
idThe background run id.
session_idThe conversation behind it, for syntic --resume.
staterunning, finished, failed, stopped, interrupted or needs-input.
prompt, cwdThe task and the folder.
started_at, ended_at, exit_codeTiming and how it ended.
pidThe process id, while running.
logPath to its log file.
cost_usd, input_tokens, output_tokensUsage so far. Input tokens count fresh input only, not cache reads or writes.

The same from the shell

Every dashboard action has a command, useful over SSH or in scripts:

CommandDoes
syntic sessions (or syntic ps)List runs.
syntic logs <id> [-f]Print the log; -f follows it.
syntic attach <id>Continue the run in this terminal.
syntic stop <id>Stop it.
syntic respawn <id>Restart an interrupted, failed, stopped or waiting run in the background.
syntic rm <id>Remove a finished run.
syntic sessions --prune [--older-than <days>]Remove old runs.

The in-session agents view

Inside a session, press ← with the prompt empty, or run /tasks, to open the agents view. It lists the main session first, then each subagent and background agent this session started, with the running ones on top:

❯ ◉ main session      fix the flaky parser test            working · 1m 04s · 18.2k tokens
  ● Explore           find every caller of parse_header    running · 32s · 1 queued
  ✔ general-purpose   write the migration tests            done · 2m 10s · 9.4k tokens

Each row shows the agent type, its task, its state, how long it has run and what it has used. A count of queued messages appears when other agents have sent it messages it has not read yet. Agents from earlier runs of a resumed session are listed too.

KeyDoes
↑ ↓, PgUp PgDnSelect.
EnterOpen that agent’s conversation (on the main session row, go back to the prompt).
/Filter the list by typing; Enter keeps the filter, Esc clears it.
sCycle which states are shown.
x xStop the selected running agent (press x twice within three seconds).
EscFrom a conversation, back to the list; from the list, back to the prompt.

Ctrl+X then Ctrl+K stops every background agent at once, from anywhere in the session.

Open it automatically

{ "showAgentsViewByDefault": true }

With this setting, the view opens by itself when background agents start.

Other places agents show up

  • A live card under each Agent(...) row in the transcript shows the subagent’s current activity, time and tokens, then folds to one line when it finishes.
  • The agent panel under the footer lists running agents at a glance.
  • /agents manages custom agent definitions (create, edit, delete) and has a Running tab with the same live list.

Where the state lives

Background runs are recorded in a background folder inside Syntic Code’s data folder (on macOS, ~/Library/Application Support/ai.syntic.syntic/background/), with one log per run. Each run’s conversation is saved like any other session, so syntic --resume <session_id> also works. See The .syntic folder.

Troubleshooting

ProblemCause and fix
syntic agents prints agent definitions instead of the dashboardIt is not attached to a terminal (piped or in a script). Run it in an interactive terminal, or use --json.
The dashboard says there are no background sessionsOnly runs started with syntic --bg, /background or /branch --bg appear. Subagents of an open session are in that session’s agents view (←).
A run shows needs inputIt asked for a permission that could not be granted unattended. syntic attach <id> to answer, or start such runs with the permissions they need (--allowed-tools, --permission-mode acceptEdits).
A run shows interruptedIts process ended without finishing, for example after a restart. syntic respawn <id> continues it; syntic respawn --interrupted continues all of them.
Disk filling with old runs and worktreesPress p in the dashboard, or syntic sessions --prune --older-than 7.