Skip to content
ColliePWA

06/Documentation

Durable agents on the phone

What a durable agent's section, conversations, questions and receipts look like

Experimental. What a durable agent shows on the phone may change, or the feature may be removed, in a later minor release. Durable agents says what decides whether it stays.

This page shows every place a durable agent appears on your phone: its row on the dashboard, its list of conversations, its questions, the chat, its starters and its pushes. Durable agents attaches a durable agent first.

A durable agent draws a control only for what it said it can do in its hello. A row below that names a control assumes the durable agent declared it.

The Durable agents section on the dashboard

Each durable agent is one row in a Durable agents section, apart from your spaces.

The Durable agents section above the spaces, with two conversations of desk waiting.
The Durable agents section above the spaces, with two conversations of desk waiting.
part of the rowwhat it shows
Line 1The durable agent's name from sources.json, and an Experimental badge
Line 2Its runtime, the name the durable agent gives itself in its hello, else durable. Then local or remote
Right edge, readyThe count of its open conversations, and in the needs-you colour the count that waits on you. The second count is hidden at zero
Right edge, not readyThe word Starting, Unreachable or Version mismatch, and no counts

A durable agent reached over its socket, or over http://127.0.0.1 or http://localhost, is local. Every other URL is remote.

The section sits below your spaces. It moves above them while any durable agent has a conversation that waits on you, and back below when the last one is answered. With no durable agent attached, the section is not drawn at all.

With "Show only panes that need you" on, the section lists only the durable agents that wait on you. Tap a row in any state to open that durable agent's conversation list.

The conversation list

A durable agent's home lists its conversations the way a messaging app lists its chats.

A durable agent's conversation list: one waiting, two open, two closed.
A durable agent's conversation list: one waiting, two open, two closed.

What waits on you comes first, then the other open conversations, newest first. The closed ones follow under the label Closed. Each row shows the title, its state mark, the time of its last activity, and one line under it: the question that waits, else the durable agent's subtitle. A waiting row also counts its open questions. A row with no title says "Untitled conversation".

Tap an open row to open it in Chat. Tap a closed row to read it, read-only. A closed conversation has a Reopen button when the durable agent can reopen one.

The open rows come from the dashboard's own data, so they draw at once. The closed ones come from the durable agent, which Collie asks once per visit and again when a conversation opens or closes, never on every poll.

at the foot of the listwhen
Load moreThe durable agent has more than 100 conversations. Each tap reads the next 100
"This durable agent does not keep a list of its conversations."The durable agent answered that it keeps no list
"The durable agent did not answer. Try again in a moment."The durable agent did not answer the read
"The durable agent speaks wire v2, this Collie speaks v1. Update Collie, or the agent's SDK."Collie refused the durable agent for its wire version (Receipts)
"Couldn't load the conversations. Try again."The read failed on the way

A durable agent that keeps no history shows its open conversations alone, with no Closed group and no note. A list already drawn stays drawn when a later read fails.

A question on the phone

A durable agent's question is a card in the chat, under the tool call it is about.

A permission card from desk, with 4 minutes left to answer.
A permission card from desk, with 4 minutes left to answer.

The caption names the durable agent, "Needs your answer · desk". When the durable agent set an expiry, the line under the title counts down: "Expires in 4 min", then "Expires in 40 s", then "Expired". Past the expiry the buttons stay, and the durable agent answers a late tap itself.

kindwhat the card showslimits
permissionOne button per option, in Collie's words: Allow, Always allow, Deny or Cancel. The durable agent's own label is the quiet second lineUp to 6 options
choiceOne row per option. One tap sends the pick. With multiple, the rows toggle under "Pick any number" and Send sends the setUp to 8 options
textOne line to type in, a count such as "12 of 500", and Send500 characters, or the durable agent's limit up to 2000
formIts fields stacked under one Send: a text line, a choice as a list to pick from, or a toggle. A required field says RequiredUp to 6 fields

"Always allow" needs two taps. The first changes the button to "Tap again to always allow" and the tool's name. The second sends it. Collie does not offer it when the question names no tool.

When Collie had to cut or clean the durable agent's words, the card says "Text shortened" and offers no "Always allow", because you were not shown the whole text.

A card of a kind this Collie does not know shows its words and says "This ask cannot be answered from the phone." A conversation draws its first 5 questions as cards, and a "Show N more" row opens the rest.

What happens after a tap

Every tap carries one request id, and only a tap sends an answer.

what happenedwhat the card sayswhat to do
The durable agent took the answerNothing: the card closesNothing
The durable agent decided first"Decided in the durable agent."Nothing. The chat keeps a line for it
The question timed out first"Timed out before an answer."Nothing. The chat keeps a line for it
Another answer came first"Already answered. This card goes away on the next update."Nothing
The question was not open, and the durable agent did not say why"Not taken. The question may show again in a moment."Wait. A durable agent that restarted asks again
The question changed under you"This ask changed. Read it again, then tap an answer."Read the new form and tap again
The answer may not have arrived"Not sure the answer arrived. Try again sends it once more."Tap Try again. It sends the same request id, so the durable agent is told once
A retry found the question closed or changed"May already be applied. Check the chat."Check the chat
Collie refused the answerCollie's reason, else "The answer was refused."Read the reason
The durable agent's machine runs an older Collie"This machine runs an older Collie and cannot take answers here. Update it, or answer in the durable agent."Update that machine

Receipts

Collie tells you how a question ended when you did not answer it, and why a durable agent is refused.

A card that came too late: Decided in the durable agent.
A card that came too late: Decided in the durable agent.
casewhat you see
The question has an expiryThe card shows the time left under its title
You tapped after the durable agent decided, or after the expiryThe card freezes and says "Decided in the durable agent." or "Timed out before an answer."
A question timed out, or the durable agent decided it, with no tap from youOne line in the chat: "Timed out before an answer:" or "Decided in the durable agent:", then the question's title
Collie refused the durable agent for its wire versionA caution box on the durable agent's home, and the words Version mismatch on its dashboard row

A question you answered from the phone, or one that ended because you stopped the turn, leaves no such line. Your tap already had its card.

A refused durable agent's home: Program speaks wire v2, this Collie speaks v1.
A refused durable agent's home: Program speaks wire v2, this Collie speaks v1.

The caution box says which wire version each side speaks, for example "Program speaks wire v2, this Collie speaks v1. Update Collie, or the durable agent's SDK." Update the older side. Versions has the rule.

The chat

A durable agent's conversation opens in Chat, its only view.

item from the durable agentwhat Chat draws
userYour own line
replyThe agent's answer
thinkingThe agent's thinking
noticeA short note in the thread
markdownRendered markdown: headings, lists, emphasis, code and links. Raw HTML shows as text
codeA code block, with its language when the durable agent named one
linkA link line with its label, else the address. Only https:// links
toolA tool call: running, done with its output, failed, or denied

A reply, thinking, notice or markdown item that is still growing has a cursor at its end and no time. The cursor goes when the final text arrives. A turn you stopped leaves the note "stopped".

Your own line

Your line shows in the thread the moment you tap Send, with a small clock. When the durable agent's own copy arrives, it takes the line's place.

statewhat the line shows
Sending, or sentThe clock. The composer says "Sent" when the durable agent took it
The answer never came"Sending, not confirmed". Send again retries with the same request id
Refused, or the turn moved on"Not sent", and your words go back into the field

A durable agent that does not echo the request id is matched by the same text within 30 seconds. A line the durable agent never writes back stops showing after 10 minutes.

While your line is the newest thing in the thread and the durable agent has not answered, a row of three dots says it is working.

The header

The header is two lines. Line 1 is the conversation's title and the Experimental badge.

line 2 showswhen
"Step 2 of 3: Save a note"The durable agent reports steps and one is running
"42%: uploading"The durable agent reports a percent, with its label
The durable agent's subtitleNo progress, or every step is done
The workspaceThe durable agent sets none of these

Progress shows only while the conversation works or waits on you.

The belt

The belt holds Steer and Stop, then up to 4 buttons of the durable agent's own.

Steer sends your text into the running turn instead of starting a new one. Stop ends the running turn. A button that cannot act now is dimmed in place, so nothing moves.

durable agent buttonthe rule
Label16 characters at most
IconOne of 12: play, pause, check, x, refresh, archive, flag, star, send, note, search, more. Any other name draws no icon
BusyA spinner, and no tap
DisabledDimmed, and no tap

A tap names the newest turn the phone saw. When the conversation has moved on, nothing runs and the phone says so: "The conversation moved on, so the action did not run." Check it, then tap the button again if you still want it.

What a durable agent pane does not have

A durable agent has no screen, so its pane has no Terminal view, no tab or pane strips, and no Keys, Type or Quick button. Its menu has no History, Pane settings or Pin to top row. Close in the menu reads "Close conversation".

New conversation and starters

The New page of a durable agent is titled New conversation, and it lists the durable agent's starters.

A starter takes no folder and no text: the durable agent decides where it works. Tap one, and the durable agent opens a new conversation. The page offers no agent, shell or command of the machine. A durable agent with no starters says "This machine's durable agent offers no starters yet."

Push

A question can push to your phone, within caps for each durable agent.

caplimitpast it
One pane3 pushes a minuteThe question shows on the phone and sends no push
One durable agent on one machine10 pushes a minuteThe same
One durable agent on one machine30 pushes an hourOne push, "A durable agent on {host} is raising many asks", then no push from that durable agent for an hour

The push says "Permission needed in" and the pane's name. A durable agent may add its own title, at most 60 characters, and a line, at most 120. Collie pushes a question once per machine, durable agent and tool call, so a question asked again after a restart shows and does not push. Pushes from a durable agent has the rest.

Masking

With secret masking on (COLLIE_REDACT, on by default), Collie masks secrets in the titles and subtitles of a durable agent's conversation list.

In a crew

The lead's dashboard has one Durable agents section for every machine of the crew. A member's durable agent adds the member's name to line 2, for example pi-durable, local, workshop, and the lead's own durable agents name no machine. A question on any machine moves the one section above the spaces. Durable agents in a crew says who answers for what.

Edit this page on GitHub

The rest of the documentation