Skip to content

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 04 Nov 15:46
· 5 commits to main since this release

Agents that show their work. This release is about making a run legible while ithappens and reviewable afterwards: the agent publishes a plan you can follow, proposes changes to its own instructions that you approve, ships a site you can open, and leaves a conversation you can join β€” while a health chart tells you whether the machine underneath is keeping up.

1. Sites

Sites: an agent can publish a real website from a task

Give an agent a task, and it can now ship the result as a static site instead of a wall of HTML in the chat. It zips the build, publishes it through the agency, and the task grows a Chat / Site pair of tabs β€” the page and the conversation live in the same window, and there is no deploy pipeline, staging bucket or DNS record involved.

Publishing is a tool call (publishSite(id, archiveLocalPath, settings), with editSite(id, { updatedSettings }) for metadata), and republishing the same slug replaces the contents atomically. A site can be agency-wide (listed in the sidebar and on the Sites page) or keep its creator-only visibility.

Sites are deliberately sealed off from your dashboard: the page runs in an iframe sandboxed without allow-same-origin, so its own JavaScript cannot read agency cookies, and it loads its assets through a signed, path-scoped content grant rather than through your session. When a site needs data behind the login, it asks β€” and the agency shows a branded consent modal that mints a site-scoped token, visible and revocable in Account β†’ Tokens.

A task with Chat and Site tabs, showing a page published by the agent

The agency consent modal a site raises before receiving a site-scoped token

flowchart LR
  A["Agent builds a zip"] --> B["publishSite(archive)"]
  B --> C[("Agency object storage")]
  C --> D["Task: Chat + Site tabs"]
  D --> E["Sandboxed iframe<br/>(opaque origin)"]
  E -->|needs data| F["Agency consent modal"]
  F -->|allow| G["Site-scoped token<br/>revocable in Account"]
2. Plans

A plan you can watch, on every task

Long-running agents used to be a black box: a spinner, then an answer. Now every task carries a plan β€” a one-line summary plus a checklist β€” that the agent publishes with a bundled reportTaskProgress tool and keeps current as it works. The numbers are derived from the checklist, so 3/6 always matches the list you see.

The plan is everywhere you look: a Progress column in the task table (with a pulsing dot on the step that is running, sortable by completion), a compact strip above the console composer, and a Plan tab in the details drawer. It belongs to the task rather than to a single run, so it survives re-queues, restarts and archiving.

And in this release planning stopped being a polite suggestion: the agent now gets a short, invisible nudge at the start of a run that lacks a plan, on a tool-heavy turn that did not update one, and before settling with unfinished or stale steps. The nudges never appear in the transcript β€” they are bookkeeping for the model, not chatter for you.

The task table with a Progress column showing bars such as 3/6 and 2/4

The Plan tab with steps marked done, in progress and pending

3. Prompt proposals

Prompt proposals: agents that improve their own instructions

System prompts were already versioned, but every edit was anonymous and only a human could make one. Now a prompt version records its author, its approver and an optional note β€” and an agent can propose a change to its own instructions, or to the project it works in, instead of silently behaving differently.

The owner approves or rejects, with a diff against the current text. A proposal records the version it was written against, so a stale one cannot be approved behind your back. Every prompt editor gained a History dialog with the full version list and a line diff, and an agent can opt into auto-approving its own proposals while project prompts still need a project owner. It is a small feature with a large effect: the rules your fleet runs on are now reviewable, attributable and reversible.

The prompt history dialog with versions, authors, notes and a line diff

stateDiagram-v2
  [*] --> Pending: agent proposes against v3
  Pending --> Approved: owner approves<br/>(prompt becomes v4)
  Pending --> Rejected: owner rejects
  Pending --> Withdrawn: author withdraws
  Pending --> Stale: prompt advanced first
  Stale --> [*]: re-propose
  Approved --> [*]
  Rejected --> [*]
4. Task templates

Task templates: the prompts you keep retyping

Every project now has templates: reusable Jinja prompts with declared, typed arguments and task defaults. Write a bug-report template once with component, severity and steps, and creating a task becomes filling in a form β€” with the title, priority, size, tags and owning teams applied from the template's defaults.

Save a template and it appends an immutable version; a task records the version and the argument values it was created from, shown as one collapsed disclosure in its General tab. Editing a template therefore never rewrites history, older versions can be restored as new ones, and deleting a template only archives it. Agents can use templates too: the createTask tool accepts a template id, version and arguments.

The task template editor with a Jinja body, a title template and declared arguments

5. Host health

Host health, streamed from every agent

An agent now samples its own machine β€” CPU (overall and per core), load, memory and swap, each filesystem, per-interface network rates, uptime and process count, the agent's own RSS and CPU, and NVIDIA GPU utilization, VRAM, temperature and power β€” and streams it to the agency on an interval you set per agent.

The agent page gains a Health tab: KPI cards with sparklines, a metric chart over 1h/6h/24h/7d/30d, filesystem bars, GPU cards, a network table and host details. The chart window slides as new samples arrive, so a busy box looks busy, and the history is downsampled server-side so 30 days stays cheap.

It runs on a container too: the sampler detects host-mounted /proc, /sys and root and reports the machine rather than the cgroup, and the chart headers tell you which view you are looking at.

The Health tab of a GPU worker: CPU, memory, disk and load KPIs, a 24-hour chart, filesystems and two RTX 4090s

sequenceDiagram
  participant H as Agent host
  participant A as cherrypi-agent
  participant G as Agency
  participant U as Dashboard
  H->>A: /proc, /sys, nvidia-smi every 1m
  A->>G: health event over the tunnel
  G->>G: samples table (30-day retention)
  U->>G: GetAgentHealthHistory
  G-->>U: downsampled series
  G-->>U: REALTIME_KIND_HEALTH ticks
6. Comments and mentions

Comments and mentions: a place to talk about the task

A task finally has a Comments tab β€” human discussion that is never sent to Pi, so you can discuss the work without steering the agent. Any project member can post, the author or an administrator can edit, and a delete leaves a tombstone naming who removed it. Comments are Markdown, can carry their own attachments, and mutate a body-free entry in the task log.

The editor understands @ and #: mention a person or a team and they get a task mention in the inbox that deep-links to the thread; reference a task and it becomes a clickable chip. Unread comments badge the task table until someone opens the tab.

The Comments tab with two comments, a mention chip and the composer

7. The dashboard, rebuilt

The task console is now a real conversation: prompts and agent replies are chat rows with avatars, tool calls collapse into named activity groups, thinking folds into its own step counter, and queued steering shows up as unsent rows in the same column. The projects view was rebuilt on the same components, and the whole dashboard moved onto daisyUI with prefixed tokens on top of the existing design system β€” light and dark themes included.

Around it: searchable pickers everywhere an actor, team or project is needed, a tag palette with one-click presets and inline creation, a single lightbox for task media, clickable stacked toasts for attention events, and a Markdown editor that remembers its height.

The rebuilt task console in light and dark themes

8. Notification sounds

The single sine chime is gone. Notifications now use procedurally synthesized sound sets β€” Classic (the old chime, note for note), Cherry, Wood, Glass and Arcade β€” each covering every attention kind, with no audio files shipped at all.

An administrator picks one set for the whole agency, while volume stays a per-browser preference next to the per-event switches, and every event has an audition button so you can hear what you are enabling. The studio behind the sets is a developer tool that shares sounds as a code snippet, a compressed link or JSON β€” the same player runs in the dashboard.

The sound studio: five sets, every attention event and the layer editor

9. Usage

Usage you can argue with

The Usage page now answers "what does a task cost us?", not just "what did we spend?". An Averages per task card shows time to completion (queue β†’ done), the agent's active work time, response rounds, tokens and spend per completed task, with sparklines for each, scoped by range and a multi-tag filter. A Model filter and a per-model comparison table split cost and tokens by model, so a cheap model that needs three times the rounds stops looking cheap.

The Usage page with per-task averages, the model breakdown and the daily charts


Also in this release, because they make the previous nine usable: tasks that fail can be retried from the row instead of closed out; the agent keeps a durable log and replays it after an outage, and the history sync backs off instead of silently giving up; a backlog task can pick its model and thinking level before it is queued; team access inherits down the project hierarchy with the same role; and both database dialects now enforce foreign keys, so a deleted task cannot leave orphaned rows behind.