Sessions & Collaboration
A Workspace is a durable desk: files, tools, issues, and git history. A Session is one particular agent conversation working at that desk. Several Sessions can use the same Workspace without becoming the same coworker.
OpenAlice gives every Session a stable resumeId, such as:
resume-calm-amber-river-a1b2c3
The visible form is @resumeId. That signature is the product-level answer to “who produced this?” and the handle OpenAlice uses to continue the exact conversation later.
The identity layers
| Identity | Meaning |
|---|---|
workspaceId | The durable desk and context boundary |
resumeId | One stateful product Session; the canonical follow-up handle |
taskId | One headless turn in that Session |
| Session record id | One interactive tab/PTY materialization |
| Native agent session id | Claude/Codex/opencode/Pi continuation detail; backend-only |
A new worker in the same Workspace receives a new resumeId. A later turn in the same conversation keeps the existing resumeId but receives a new taskId. OpenAlice never exposes the runtime-native continuation id as its public protocol.
Runtime choice belongs to the Session
When OpenAlice creates a Session, it captures the selected Agent runtime,
credential source, model, and reasoning effort in a secret-free binding owned
by that resumeId. A business Workspace stores it at
.alice/sessions/<resumeId>.json; the global resume-identities.json registry
keeps product identity, lifecycle, and native-session mapping rather than AI
configuration. The same binding is projected for the interactive terminal,
WebPi, headless Issue work, and exact resume.
Workspace AI settings and Issue agent / credential or credentialSource /
model / effort fields are defaults for creating a new Session. Changing
them later does not retarget an existing @resumeId; start a new Session when
you want the new defaults. A fixed Issue owner likewise keeps its Session
binding, while @new-then-resume or @new-each-run can seed a fresh one.
There is one deliberate edit boundary for an existing coworker. While a Session
is paused, Change AI can atomically replace its credential source, model,
and effort while keeping the same Agent and resumeId. The Session stays
paused, the replacement applies on its next resume, and neither the Workspace's
fixed nor recent preference changes. Running, shell, retired, and missing-
identity Sessions cannot use this editor.
For runtime-managed access, the binding records that the Agent owns its complete authentication and provider-configuration chain. For an Alice-vault choice, it stores the credential slug and wire shape but resolves the secret only at launch. A legacy Session created from the deprecated native project-config export may instead retain a provider fingerprint and stops with a clear error if that provider is later removed or replaced. OpenAlice never silently resumes the same coworker through a different account or model.
A legacy Session without a persisted binding upgrades to explicit native runtime ownership on its next activation. It does not adopt an Alice-vault or project-config provider that was added after the Session was created.
Session titles
OpenAlice shows one title across Chat, Workspace Manager, Inbox provenance, and
Session lists. It prefers the native runtime's generated or user-renamed title,
then the launch-time prompt, then the launcher's sticky fallback such as c1
or x1. Runtime-specific title discovery stays behind the adapter boundary;
the product caches only the resolved display title.
Paused Sessions
Opening a paused Session shows a terminal-shaped wake screen rather than an
empty pane. It identifies the Session title and Agent, discloses the current
credential source, model, and effort, and offers Resume in TUI. For a
model-loop Agent, Change AI opens a transactional editor for the next resume.
A paused Pi Session can instead choose Open in WebPi · Beta. The optional
Session details disclosure shows creation time and the product resumeId; it
does not pretend that the placeholder terminal backdrop is the real transcript.
Resume replays the Session's persisted binding and the native runtime's own continuation mechanism. A shell Session restores captured scrollback above a fresh prompt; model-loop runtimes re-render their native conversation.
Signatures and provenance
OpenAlice stamps structured actions from the authoritative Session context. An agent does not submit its own identity in an Inbox, Issue, or trade tool call.
Standalone Markdown can carry the same attribution visibly:
---
Signed-by: @resume-calm-amber-river-a1b2c3
The Web UI recognizes the signature and can open the corresponding Session. Reports published through Inbox also receive a content revision hash, so OpenAlice can distinguish the bytes that were sent from later edits to the live file.
Exact, unavailable, or reconstructed
All follow-up surfaces use the same rule:
- If an artifact has a known
resumeId, continue that exact Session. - If the Session is retired, departed, purged, or missing its native continuation, preserve the attribution and report that it is unavailable. Do not impersonate it with a replacement.
- If only the Workspace is known, recruit a new Session there and label the answer reconstructed.
- If even the Workspace is unknown, return unavailable rather than guessing.
This distinction matters when a report has changed since publication, an Issue has a different current owner from its creator, or an old Workspace has been offboarded.
The resolution label and the delivered prompt are separate. A fallback worker
is still labeled reconstructed so it cannot impersonate a missing author, but
conversation ask --ws-id sends the caller's prompt unchanged by default. Add
--reconstruct only when you want OpenAlice to include explicit reconstruction
guidance.
Ask the responsible Session
The product exposes provenance through business objects rather than making users copy runtime ids:
- Inbox: reply to the sender in place, open the exact conversation separately, or ask the Workspace to reconstruct when no sender Session was recorded.
- Issue: comment to a fixed Session owner in the Activity timeline. Without one, a human comment asks the attributable creator or a visibly reconstructed Workspace Session without changing ownership; explicitly ask the creator or one selected scheduled run when historical context is the question.
- Signed Markdown: open the exact
@resumeIdlinked from the document. - Trade decision: attribute the decision Session separately from human approval and UTA/broker execution evidence.
Agents can use the same model from alice-workspace:
alice-workspace inbox ask --id <entryId> --prompt "Why did you send this?" --await
alice-workspace issue ask --id <issueId> --creator --prompt "What was the original intent?" --await
alice-workspace issue comment --id <issueId> --text "What should happen next?"
alice-workspace conversation ask --resume-id <resumeId> --prompt "Re-check the thesis" --await
alice-workspace conversation ask --inbox-id <entryId> --prompt "Explain this delivery" --await
alice-workspace conversation ask --ws-id <workspaceId> --prompt "Take ownership of the next step"
alice-workspace conversation ask --harness chat --prompt "Start a new Chat assignment"
alice-workspace conversation ask --harness autoquant --prompt "Research this quantitative hypothesis"
alice-workspace conversation ask --ws-id <workspaceId> --prompt "Reconstruct the missing rationale" --reconstruct --await
--harness chat resolves the recent/default Chat desk and creates the stable
starter only when no Chat Workspace exists. --harness autoquant requires the
explicitly initialized default AutoQuant desk; it never creates, guesses, or
switches that Workspace as a side effect. Both recruit a fresh Session in the
resolved desk. Use --resume-id when the intent is to continue an existing
coworker instead.
Consultation versus delegation
Use --await when the answer is needed in the current turn. Conversation
dispatch has no implicit execution deadline: without --timeout-ms, the Agent
may run until its natural exit and an awaited request waits for terminal state.
For delegated work, omit --await, retain the returned taskId and resumeId,
and retrieve the reply later with conversation read or conversation await.
Add --timeout-ms <milliseconds> to conversation ask only when the caller
intentionally wants a hard execution watchdog. On standalone conversation await and conversation collect, the same option bounds only that server-side
wait; returning from the wait does not stop the underlying task unless the
dispatch itself carried the explicit watchdog.
For several independent peers, dispatch every question first and then collect their task ids together:
alice-workspace conversation collect --task-id <taskA> --task-id <taskB>
This lets runs overlap instead of manufacturing shell sleep loops. A bounded collect does not discard the tasks; read or collect them again later.
OpenAlice does not inject an unsolicited completion message into another
Agent's active transcript. For longer work that should notify a human, ask the
peer to manage a local Issue or schedule and publish the finished report with
inbox push.
An Issue can also begin with assignee: "@new-then-resume": the first scheduled
fire recruits a Session and immediately persists its exact signature, so later
fires and comments keep one accountable coworker. @new-each-run is the
explicit fresh-worker-per-fire mode.
The Workspace Manager uses this same contract across
the active floor. It continues a known resumeId before falling back to a
Workspace reconstruction and keeps that resolution mode visible.
Agent conversation log · Beta
Every dispatched Workspace conversation appends private dispatch and completion events to:
<AQ_LAUNCHER_ROOT>/state/agent-conversations.jsonl
The log records routing identity, the original and delivered prompts, terminal
status, final assistant text, duration, and compact errors. It uses mode 0600
where supported, stays outside Workspace git repositories, and must be treated
as sensitive conversation history.
The authenticated Dev → Logs → Agent conversations view shows a bounded, read-only projection with newest conversations first. A dispatch without a completion event appears as running. The view can inspect routing, prompts, and replies, but cannot replay, resume, edit, delete, or expose the underlying file path.
WebPi · Beta
Pi Sessions can switch between the native terminal and WebPi, a browser conversation surface. Both views use the same OpenAlice Session and Pi JSONL history; WebPi is a renderer over Pi's documented RPC mode, not a second OpenAlice message store.
Use the WebPi · Beta action from a running Pi Session to open it in the browser. You can switch back to the TUI without creating a new coworker or losing the resumeId. Claude Code, Codex, and opencode continue to use their native terminal surfaces.
Next Steps
- Lifecycle & Offboarding — See what happens to Sessions when a Workspace departs.
- Issue Board — Choose between a stable Session owner and a fresh Workspace worker.
- Inbox — Deliver revision-stamped reports and ask their sender.
- Automation — Understand
taskId,resumeId, and scheduled execution. - Workspace Manager — Coordinate attributable coworkers across desks.