Skip to content

Dashboard

The Dashboard (/dashboard) is what Snippbot opens to. It answers one question — what am I working on? — with a compact stat strip on top and everything you have favorited below it, grouped by kind.

Visiting / redirects here.

Anything you star anywhere in the UI shows up on the Dashboard. Six kinds can be favorited today:

KindWhere you star it
ChatsThe star inside each chat tab, on any row of the History page, or Add to Dashboard in a chat tab’s right-click menu
ProjectsThe star in a project card’s action row
PackagesThe star on a package row or card, on the Packages page
AssetsHover an asset and click its star — or use the right-click menu
Scheduled jobsThe star in a job card’s action row, on the Schedule page
WorkflowsThe star on a workflow card, or beside the name in the workflow builder

A star stays visible once it is set, so you can see what is on your Dashboard by glancing down a list. On surfaces where it would otherwise be clutter, an unset star only appears when you hover the row.

Every section heading has an Add items button. It opens a searchable list of everything of that kind, with a tick against the ones already on your Dashboard — tick to add, untick to remove. It is the fastest way to curate a section, and the only way to remove several things without visiting each page.

Changes save as you tick them; there is no separate save step.

Favorites live in the daemon, not in your browser, so they follow you to any browser pointed at the same install (the mobile app has no Dashboard). Starring something on your desktop updates the star everywhere within a second — the daemon pushes a favorite.added / favorite.removed event over its WebSocket bus.

Image assets appear as thumbnails; video and audio get a player you can start without leaving the page. Scheduled jobs show when they last ran and when they run next.

An asset whose underlying file has been removed shows a file missing badge instead of a preview — the entry is still there, the bytes are not.

The descriptions toggle in the header (the lines icon) controls how much each item says — a project’s description, the tail of a chat’s last reply, a job’s run times. Turn it off for a denser board. Thumbnails stay either way, since a thumbnail is the item rather than a note about it.

The toggle in the header switches between the two views, and your choice is remembered per browser.

  • Grid packs the most items into the least space.
  • List is wider and stays scannable — a small thumbnail, a line or two of description, and the run times. That is usually what tells two similarly-titled chats apart. A long section scrolls inside itself rather than pushing the rest of the page down. Video and audio show a type chip here rather than a cramped player; open the grid view to play them.

Drag a card or row within its section to reorder it, or use its Move up / Move down buttons (they appear on hover or keyboard focus, and always on touch screens, where dragging doesn’t work). The order is saved per section and persists across devices.

A section shows up to 200 items. A longer one says Showing N of M and turns reordering off until everything fits, since a partial order can’t place the hidden items.

Each item can carry a short note (the pencil button). Unstarring an item — on the Dashboard or with Remove from favorites in Review chats — shows a toast with Undo, which stars it again with the same label and note.

Every card, every chat report and every Board item has an Ask Snipp button. It opens the Snipp window with a question about that item typed in; nothing is sent, and anything you had already typed there stays, with the question below it.

If you delete a project, chat or scheduled job — or uninstall a favorited package — its favorite disappears with it.

An entity that vanishes some other way (an asset removed while the daemon was stopped, say) leaves a dimmed card marked No longer available with a Remove button. That is deliberate: a favorite silently disappearing looks like data loss, so the Dashboard shows you what happened instead.

A section with nothing starred in it shows a rotating tip about that part of Snippbot, with arrows to step through the deck and a reminder of how to add something to it. Once a section has favorites, the tip collapses behind the lightbulb icon in its heading — click it any time to bring the deck back.

Collapsing a section, and hiding or showing its tips, is remembered per browser.

The header shows a condensed read of the same data the Monitoring UI presents in full:

StatMeaning
TokensTokens spent inside the period: each chat message’s tokens when it was written, plus Project Developer, loop and project-task spend. Hover for the split; chat review and swarm runs aren’t recorded yet
ConversationsYour chats with a message in the period (not scheduled runs or internal conversations)
Task successCompleted ÷ (completed + failed) for project and execution-plan tasks, with the failure count
Active jobsScheduled jobs you made that are on now, with the paused count; +N autopilot counts the hidden autopilot heartbeat jobs
Loops runningLoop runs going or paused right now, with what loops spent in the period
SchedulerWhether the scheduler engine is running

Periods are rolling — Last 24h is the last 24 hours, not “today” — and charts are labelled in your browser’s time zone. The period selector defaults to Last 24h — the Dashboard is a “right now” view, where the Monitor page is for analysis and defaults to 7 days. Your choice is remembered per browser.

Under the stat strip, a Needs you row appears when something is waiting on you: Project Developer questions, proposals to review, out-of-date reports, autopilot that paused itself, and autopilot that ran in the last 24 hours. Each chip opens Review chats on the tab that shows it.

Notes your installed packages leave you (for example, Cinema Studio’s “Coverage finished: 3 takes ready to look at.”) are listed under the chips, whether or not you have starred anything. Each shows the package’s name and a Package tag, then the note as plain text. Open goes to the package’s page, and Dismiss hides the note (the desktop app shows the same notes and dismissals). More than three fold under Show N more. The mobile app shows them on Home, with Dismiss.

Favorites are ordinary REST resources, so scripts and other clients can use them:

Terminal window
# Everything you have starred, hydrated into render-ready cards
curl -H "Authorization: Bearer $SNIPPBOT_API_KEY" \
http://localhost:18781/api/favorites
# Star a project
curl -X POST -H "Authorization: Bearer $SNIPPBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"entity_type":"project","entity_id":"proj_abc123"}' \
http://localhost:18781/api/favorites
# Unstar it again
curl -X DELETE -H "Authorization: Bearer $SNIPPBOT_API_KEY" \
"http://localhost:18781/api/favorites?entity_type=project&entity_id=proj_abc123"

Starring is idempotent: repeating the POST returns the existing favorite rather than an error. entity_type must be one of conversation, project, package, asset, scheduled_job, workflow — anything else returns a 400 listing the valid types.

To see what you could star — the same list the Add items picker shows, with each row flagged as already starred or not:

Terminal window
curl -H "Authorization: Bearer $SNIPPBOT_API_KEY" \
"http://localhost:18781/api/favorites/candidates?entity_type=workflow&q=review"

Each starred chat’s card carries its review at a glance — the priority badge, the completion bar and score — and, when the chat has moved on since its report was written, an Out of date badge. Under that are three quick actions so the common moves don’t need the Review modal:

  • Open chat opens the chat by itself in a new window.
  • Re-analyse appears on an out-of-date report (or Analyse on a chat with no report yet) and reads the chat again — about one model call (two if the first attempt fails). The card updates in place when it finishes.
  • Next actions opens the Review modal on that chat’s report: what is still to do, what it is blocked on, and where to take it.

The Conversations section has a Review chats button. It opens a report on every chat you’ve starred: a completion score with the reason behind it, a short summary of where the work stands, three columns for what’s done, what’s still to do and what it’s blocked on, and a priority band so the list can be ordered by what needs you first.

Opening the modal is free — it shows reports that already exist. Producing a report costs one model call per chat, so it only happens when you ask:

  • Analyse N chats appears when some chats have no report yet, or have moved on since their last one.
  • Re-analyse all rebuilds every report from scratch. It says how many model calls that is and asks first.
  • The circular arrow on a single card re-analyses just that chat.

Analysis runs on the server as one job, whichever button started it. A chat card and the modal show the same progress, and a chat that is already being analysed is never sent twice, however many times you click or how many windows you have open. Closing the window doesn’t stop the job. Only starred chats are analysed, and there is a daily limit of 150 analysis model calls (UTC day; set SNIPPBOT_REVIEW_DAILY_ANALYSES to change it). Once it’s reached, the remaining chats show “Daily analysis limit reached” and nothing more is spent until the next day. A chat you unstar while it’s waiting in the job is skipped, so it costs nothing.

Unstarring a chat hides its report from Review and the Board but keeps it: star the chat again and the report is back, with no new model call. A report is deleted only when its chat is deleted.

The modal has two views, switched with the Chats / Board tabs at the top (the i button beside them explains both): Chats is one report per starred chat, most urgent first; Board is every outstanding item across all of them in one list, tagged by what kind of work it is.

The Model picker next to Analyse chooses which model reads the chats. It starts on your Default Internal Model (Settings → AI Providers); pick another for reviews only and Use default takes it back.

Reports are kept until the chat itself changes, so reopening the modal costs nothing. A report whose chat has moved on since it was written is marked Out of date — checked each time you open the modal or come back to its window, so advancing a chat elsewhere shows up as soon as you return. Analysis uses your configured default internal model — the same one the /compact summarizer uses — so there’s no separate model setting to keep in sync.

Every item under Still to do and Blocked on has a See solutions button. It opens a short form: the one to three ways the model suggests to clear that item, plus Other where you can type your own. Use this solution records it against the item — do that for as many items as you like. Under the report is a short list of directions the chat could take next; pick one of those too if you want.

Then choose Open chat with N picks: the chat opens in a new window in focus mode with everything you picked folded into one numbered message, already typed into the composer. It is not sent — you read it in context and decide.

Finding a chat, or an item, by what was said

Section titled “Finding a chat, or an item, by what was said”

The search box under the status line reaches into the text of the messages, not just titles — the same search the History page runs. What it filters follows the view:

  • In Chats it narrows the starred reports to the ones whose title or messages contain the term. A chat that matched on what was said shows the matching passage under its title, with the term highlighted, so the hit explains itself.
  • In Board it narrows the items — the question there is “where is the thing I need to do”, so the item’s own words are what is searched. A starred chat that only mentions the term has nothing to show on the Board; the line beside the box says Mentioned in N starred chats with a link back to Chats.

Chats you have not starred are never mixed in. When the term also appears in some, the line beside the box counts them — N matches outside your starred chats — and Search History → opens the History page in a new tab with the same term already in its box.

The history drop-down on the Chat page (click the conversation title) has the same search: type a word you remember saying and the chat turns up even when it is far down the list or the word is nowhere in its title.

On the Board, select items from one chat that are all tagged Mechanical and the selection bar offers Run Project Developer. Name the repository it should work in (remembered per browser), pick the Agent model if you want something other than your Default Internal Model, and run. The agent works each item in its own git worktree — a sibling directory on a pd/… branch, never your checkout — and comes back with a diff and a note per item for you to Accept (the item is marked done and a summary is posted into the chat) or Reject. If it meets a choice that would fork the project it stops and asks; the question shows on the row and in your insights, and answering resumes the run. Nothing is committed on your branches, pushed, merged or deployed.

The repository has to be one Snippbot already knows belongs to you:

  • the chat’s own working folder, or the folder of the project the chat is linked to;
  • the folder of any Snippbot project you’ve registered;
  • a repository this chat’s earlier runs (or its autopilot) already used; or
  • a repository under a folder you list in the SNIPPBOT_PD_REPO_ROOTS environment variable (separate several with : on macOS/Linux, ; on Windows).

Your home folder itself and anything inside Snippbot’s data folder are always refused. A folder that would cover everything doesn’t count either — /, a top-level folder such as /Users, your home folder or anything above it, or a drive’s root — so a project registered there (or a chat working there) doesn’t open every repository on the disk. And a repository only counts as a project’s when the project’s folder is part of it, not when another repository sits in between.

One run works at a time across all your chats, and every run counts against a daily token budget (2M tokens by default, SNIPPBOT_PD_DAILY_TOKENS, per UTC day). Tokens count on the day they’re spent, so a run you answer the day after it asked charges the new day. The budget is checked before a run starts, before an answered run resumes, and between items while it works, so a run stops at the next item once the day’s budget is spent (the item in flight may run a little past it). A run waiting on your answer only holds its own chat: other chats can start runs in the meantime, and you answer it once the working run finishes.

Each chat’s Board header has an Autopilot switch, off by default. Turn it on with a repository, a schedule — a preset, or Custom (cron, UTC); nothing may run more often than every 30 minutes anywhere in its cycle — and Items per beat (1 to 5, default 3). On that schedule the agent picks up that chat’s open Mechanical items — never decisions, never anything of yours, never anything already handed over — and starts one run over up to that many of them. Edit changes the schedule, items or repository while autopilot stays on. What comes back is the same proposals you would get by hand; nothing is accepted on its own. The header shows what the last beat did and why it paused itself (daily budget, out-of-date report, a run already going). Beat now runs one immediately. Stop all autopilot at the top of the Board stops every heartbeat and every running agent at once (it asks first, as do Dismiss, Reject and Discard worktree).

Select only Decision items instead and the button reads Draft options: the agent reads the code — it cannot edit it — and comes back with two to four options, each saying what it would touch, what it would break, what it rules out later, and how confident it is, plus where the evidence leans. They appear at the top of that item’s See solutions form; the choice stays yours.

The row of buttons at the bottom of each card does the rest: Open opens the chat in focus mode with nothing typed, Re-analyse rebuilds just that report, and Remove from favorites drops the chat from the Dashboard. The right-hand side shows which model wrote the report and when.

Reports written before scores and resolutions existed still show, with an approximate score (marked ≈) and no resolutions; they’re flagged Out of date and refreshed by the next Analyse so you get the full report.

An asset row and its file live in different places, so a row can outlive its bytes. The Assets page marks those with a Missing badge instead of rendering a broken thumbnail, and the toolbar filter switches between All files, Hide broken, and Broken only.

When any exist, a banner offers Clean up, which deletes the rows whose files are gone (and any Dashboard stars pointing at them). It asks for a second, explicit confirmation — the rows are the only record those assets existed.

Terminal window
# Dry run: list what would be removed, delete nothing.
curl -X POST -H "Authorization: Bearer $SNIPPBOT_API_KEY" \
-H "Content-Type: application/json" -d '{}' \
"http://localhost:18781/api/assets/prune-missing"

Pass {"confirm": true} to actually delete. Every asset returned by GET /api/assets also carries a file_missing flag, and ?missing=only or ?missing=exclude filters on it.