Turning speaking on connected the local voice and cleared the busy
state halfway through, so a voice picked in that window was replaced by
the default once the switch finished. The panel now stays busy for the
whole switch.
Claude-Session: https://claude.ai/code/session_01Wy1md9QE1ayJbDCwJ4vAQs
Co-authored-by: Claude <noreply@anthropic.com>
The mobile OTA job uploaded the EAS CLI to the GitHub cache service
because expo-github-action caches by default. Turn both of its caches
off and have the Actions budget test reject the Expo action unless they
are off.
Claude-Session: https://claude.ai/code/session_01Wy1md9QE1ayJbDCwJ4vAQs
Co-authored-by: Claude <noreply@anthropic.com>
* Fix red main: mobile group kind, i18n catalogs, project picker check
Main CI failed on typecheck, unit tests and web E2E after the last two
direct pushes. MobileGroup now carries the optional chat kind the mobile
screens read, the Lingui catalogs are re-extracted with German strings
for the new voice texts, the project overview plus icon meets the UI
scale guard, and the sidebar E2E expects the renamed project lead.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R8L4XgqjAemFR2remB5hVY
* Format files merged from main
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wy1md9QE1ayJbDCwJ4vAQs
* Align E2E with the canvas close button and per-chat drafts
The in-app browser now closes from the side panel header, and each chat
keeps its own unsent draft. The group chat test waits for the settings
save to land before switching chats, so the switch no longer races the
panel closing.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wy1md9QE1ayJbDCwJ4vAQs
---------
Co-authored-by: Claude <noreply@anthropic.com>
Two gaps kept agents from pushing on a containerized supervisor:
- The git and gh shims called rakazo-broker by name, and login shells in
the computer reset PATH, so the broker was "not found". The shims now
call it next to their own resolved path, and /usr/bin/gh is a shim too.
- A project folder outside the supervisor container's mounts is invisible
to it, so broker git ran against an empty directory. Such calls now run
in a one-off computer-image container that binds the folder.
Claude-Session: https://claude.ai/code/session_01Tgvrj34NMnaqvtgvruYQZZ
Co-authored-by: Claude <noreply@anthropic.com>
The GitHub broker runs git and gh for agent computers, but the supervisor
image is node:bookworm-slim, which has neither. A containerized supervisor
therefore failed every broker call. Install both, and when the supervisor
runs as root, run git as the workspace owner so clones stay writable by
the computer.
Claude-Session: https://claude.ai/code/session_01Tgvrj34NMnaqvtgvruYQZZ
Co-authored-by: Claude <noreply@anthropic.com>
A supervisor that runs as a standalone container kept the image it was
started with, so broker fixes never reached it. The deploy now rebuilds
that image when its sources change and recreates the container with the
same network, restart policy, mounts and environment, restoring the old
one if the new one stays unhealthy. The broker socket moves into the data
directory and is shared from containerized supervisors too.
Claude-Session: https://claude.ai/code/session_01Tgvrj34NMnaqvtgvruYQZZ
Co-authored-by: Claude <noreply@anthropic.com>
Chief's computer still timed out reaching the GitHub broker after the
socket mount shipped. A reused computer kept its old container whenever
the image matched, so one created without the mount never got it, and
the socket was only served for a loopback-bound supervisor.
- Recreate a reused computer that lacks the socket mount once the
supervisor serves the socket.
- Serve the socket from any supervisor running directly on a Linux host.
- Give the broker listeners the same long request timeout as the main
server, so large brokered clones are not cut after five minutes.
- The broker client now says which path failed (no socket, socket exit,
network exit) so a relayed error points at the cause.
Claude-Session: https://claude.ai/code/session_01Tgvrj34NMnaqvtgvruYQZZ
Co-authored-by: Claude <noreply@anthropic.com>
Computers on evo could not reach the broker over TCP: the git shim
reported that evOo's GitHub connection was unreachable, so cloning
private repositories still failed. Container-to-host traffic depends on
the host firewall and on which Docker network the computer joined.
- On a Linux host the supervisor also serves the broker on a unix socket
in a host directory (SANDBOX_GITHUB_BROKER_SOCKET_DIR, default
~/.rakazo/github-broker), and mounts that directory read-only into
each new computer once the socket listens.
- The shim uses the socket when it is present and falls back to the
network otherwise; connections time out after 5 seconds and the
unreachable message names the curl exit code.
Claude-Session: https://claude.ai/code/session_01Tgvrj34NMnaqvtgvruYQZZ
Co-authored-by: Claude <noreply@anthropic.com>
Agents kept configuring git with RAKAZO_GITHUB_BROKER_RUN_TOKEN as a
password because the system prompt listed it among "managed credentials"
to use in shell commands. GitHub rejects it, and the agent then asks the
user for a personal access token.
- List only the user's own agent secrets in that instruction; the broker
variables stay in the environment for the git shim.
- Make /usr/bin/git the shim as well, so git called by absolute path
still goes through the broker; the real binary moves out of PATH.
- Prompt no longer names the broker variable.
Claude-Session: https://claude.ai/code/session_01Tgvrj34NMnaqvtgvruYQZZ
Co-authored-by: Claude <noreply@anthropic.com>
The computer's git and gh shims passed a literal "--" into the JSON argv
(python -c keeps it in sys.argv), so every brokered clone arrived as
"git -- clone" and the broker refused it. Agents then fell back to real
git with the broker run token as a password, which GitHub rejects.
- Drop the stray "--" from both shim payloads.
- Route git through the broker even behind -c/-C/--no-pager options.
- Share one broker client that falls back to the default gateway for
computers created before host.docker.internal was mapped, and says
plainly when the broker is unreachable or refuses a request.
- Broker normalizes GitHub SSH remotes and pasted credentials to plain
HTTPS and points a rejected stored token at reconnecting GitHub.
- Prompt says plain git clone works and the run token is not a GitHub token.
Claude-Session: https://claude.ai/code/session_01Tgvrj34NMnaqvtgvruYQZZ
Co-authored-by: Claude <noreply@anthropic.com>
* Let computer git reach GitHub through the broker with working credentials
The broker URL handed to computers pointed at the supervisor's loopback
address, which a container cannot reach, and host git ignored the
integration token for HTTPS remotes. Computers now get the host through
host.docker.internal, host git receives the token via a one-off
credential helper, and clone paths and the working directory map from
the computer onto the host workspace.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Tgvrj34NMnaqvtgvruYQZZ
* Serve the GitHub broker to computers on a Linux host-run supervisor
A loopback-bound supervisor is unreachable from containers on Linux, so
it also serves the broker routes alone on the default bridge gateway,
which only containers on the same host can reach.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Tgvrj34NMnaqvtgvruYQZZ
---------
Co-authored-by: Claude <noreply@anthropic.com>
* Find connected-app tools from queries written in words
Catalog search matched the query only as one substring, so "search
repositories" or "get file" found nothing for search_repositories and
get_file_contents and the agent concluded GitHub had no tools. Underscores,
hyphens and spaces now compare equal, a query matches when every word starts
a word of the tool, and a miss returns the source's tool names.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Tgvrj34NMnaqvtgvruYQZZ
* Bump Expo SDK 57 packages to the patch versions expo install expects
expo install --check now expects @expo/ui 57.0.25, expo 57.0.30 and
expo-router 57.0.28, which turns the mobile typecheck red on every branch.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Tgvrj34NMnaqvtgvruYQZZ
---------
Co-authored-by: Claude <noreply@anthropic.com>
* media: check ffmpeg filter support before subtitle operations
* sandbox: handle synchronous spawn errors safely in desktop sandbox
* Voice-first streaming, non-blocking follow-ups, quiet routines and chat UX
Why: questions blocked the chat, follow-up messages had no acknowledgement, message actions sat beside the bubble, and voice turn-taking added latency.
What: waiting runs accept steering messages and the bot marks each claimed follow-up as seen; unclaimed follow-ups show as queued. Reaction, copy and reply controls sit under each message. Streaming voice (VAD endpointing, barge-in that stops the run, clause-based TTS), an optimistic input queue, procedural earcons and delta-based quiet routines were added. Onboarding can be skipped straight to the main conversation. Dual-surface layout and project pickers are included. Status colors use semantic tokens.
Tested: unit suites for core, adapters, api and web pass, typecheck and Biome are clean. Browser end-to-end tests were not run locally.
* Update translation catalogs
Re-extracted catalogs for the new and moved strings; the catalog sync test passes.
* Add project plan and test readiness notes
Notes from the milestone work: feature inventory, test infrastructure and test readiness. No code changes.
* fix(ci): align scale guards, space deletion, computer toggle, and mobile expo deps
* fix(ci): restore space deletion guard, browser toggle, and run-steps contracts
* fix(ci): restore model resolution errors, group stage, and onboarding flow
* fix(ci): restore in-app-browser close button, disable stop button while sending, and sync lingui catalogs
* fix(ci): address web e2e failures for bot-crud, choice cards, message quote, and voice onboarding
* test(web): wait for avatar and rig visibility in oo-avatar motion spec
* test(web): wait for persisted message IDs in message-hover-actions pagination spec
* feat: recruit library agents into project conversations and scan project folders
* test(web): expect repo description in GithubRepoPicker onChange
* Onboarding: always drop the local voice when the voice step is skipped
Skipping waited only for the latest voice load and disconnected only
when the client saw the connect succeed. An earlier or client-failed
connect could still persist the local credential, so a user who
skipped voice was left with one. Wait for every load and always
disconnect.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wy1md9QE1ayJbDCwJ4vAQs
* Shell: hide the optimistic copy once the transcript shows the send
A message sent while the bot works streamed into the transcript before
its send request resolved, so the same text showed twice until the
optimistic bubble was removed. Drop an optimistic message as soon as a
persisted user message with the same text appears.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wy1md9QE1ayJbDCwJ4vAQs
---------
Co-authored-by: Claude <noreply@anthropic.com>
* media: check ffmpeg filter support before subtitle operations
* sandbox: handle synchronous spawn errors safely in desktop sandbox
* Voice-first streaming, non-blocking follow-ups, quiet routines and chat UX
Why: questions blocked the chat, follow-up messages had no acknowledgement, message actions sat beside the bubble, and voice turn-taking added latency.
What: waiting runs accept steering messages and the bot marks each claimed follow-up as seen; unclaimed follow-ups show as queued. Reaction, copy and reply controls sit under each message. Streaming voice (VAD endpointing, barge-in that stops the run, clause-based TTS), an optimistic input queue, procedural earcons and delta-based quiet routines were added. Onboarding can be skipped straight to the main conversation. Dual-surface layout and project pickers are included. Status colors use semantic tokens.
Tested: unit suites for core, adapters, api and web pass, typecheck and Biome are clean. Browser end-to-end tests were not run locally.
* Update translation catalogs
Re-extracted catalogs for the new and moved strings; the catalog sync test passes.
* Add project plan and test readiness notes
Notes from the milestone work: feature inventory, test infrastructure and test readiness. No code changes.
* fix(ci): align scale guards, space deletion, computer toggle, and mobile expo deps
* fix(ci): restore space deletion guard, browser toggle, and run-steps contracts
* fix(ci): restore model resolution errors, group stage, and onboarding flow
* fix(ci): restore in-app-browser close button, disable stop button while sending, and sync lingui catalogs
* fix(ci): address web e2e failures for bot-crud, choice cards, message quote, and voice onboarding
* test(web): wait for avatar and rig visibility in oo-avatar motion spec
* test(web): wait for persisted message IDs in message-hover-actions pagination spec
* Onboarding: always drop the local voice when the voice step is skipped
Skipping waited only for the latest voice load and disconnected only
when the client saw the connect succeed. An earlier or client-failed
connect could still persist the local credential, so a user who
skipped voice was left with one. Wait for every load and always
disconnect.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wy1md9QE1ayJbDCwJ4vAQs
* Shell: hide the optimistic copy once the transcript shows the send
A message sent while the bot works streamed into the transcript before
its send request resolved, so the same text showed twice until the
optimistic bubble was removed. Drop an optimistic message as soon as a
persisted user message with the same text appears.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wy1md9QE1ayJbDCwJ4vAQs
---------
Co-authored-by: Claude <noreply@anthropic.com>
Main CI failed Web E2E on a blank chart (no browser errors) when route
handlers were registered before the fixture finished lazy-loading Plot.
Warm the fixture first, and retry once via reload inside expectChart.
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: cynarAI <cynarAI@users.noreply.github.com>
An 'Output validation failed' response was swallowed by the RPC error logger because it is an ORPCError, so the failing procedure and fields never reached the logs. Log those cases with the procedure and the field paths, without the payload.
Claude-Session: https://claude.ai/code/session_01LFxDxzmAy9mJnKWoBrCtRB
Co-authored-by: Claude <noreply@anthropic.com>
The mobile typecheck runs expo install --check, which started failing on main once Expo published newer SDK 57 patch releases. Only the eleven flagged packages move.
Claude-Session: https://claude.ai/code/session_01LFxDxzmAy9mJnKWoBrCtRB
Co-authored-by: Claude <noreply@anthropic.com>
* Broker GitHub integration token for computer git/gh
Use the Integrations GitHub MCP secret for supervisor broker sessions
so home and project computers can clone private repos without PAT prompts.
Add rakazo git/gh shims, push policy, deploy image rebuild, and tests.
Co-authored-by: cynarAI <cynarAI@users.noreply.github.com>
* ci: retrigger product checks after runner timeout
Co-authored-by: cynarAI <cynarAI@users.noreply.github.com>
* ci: run product change detection on GitHub-hosted runners
Co-authored-by: cynarAI <cynarAI@users.noreply.github.com>
* style: format deployment-github-token
Co-authored-by: cynarAI <cynarAI@users.noreply.github.com>
* ci: self-hosted change detection with timeout and fail-open gate
Keep Detect product changes on evoo-ci with a 10-minute cap, continue-on-error
filtering, and a fail-open product flag when detection fails. Downstream jobs
and Product CI treat a failed or timed-out changes job as full product impact.
Add job timeouts on remaining self-hosted ci jobs.
Co-authored-by: cynarAI <cynarAI@users.noreply.github.com>
* fix: continueRun tests and broker home path guard
- Skip broker workspace resolution when computer homeKey is absent
- Add shared continue-run Prisma/home/secretStore test stubs
- Update computer PATH expectation and evo-deploy command sequence
- Remove unused executor imports flagged by Biome
Co-authored-by: cynarAI <cynarAI@users.noreply.github.com>
* style: Biome format and import order for broker CI
Co-authored-by: cynarAI <cynarAI@users.noreply.github.com>
* fix: compose YAML, typecheck for broker stubs and GitHub hint
Co-authored-by: cynarAI <cynarAI@users.noreply.github.com>
* ci: retrigger Product CI after compose and typecheck fixes
Co-authored-by: cynarAI <cynarAI@users.noreply.github.com>
* ci: retry Product CI queue
Co-authored-by: cynarAI <cynarAI@users.noreply.github.com>
* ci: give self-hosted Web E2E a 45m job timeout
Co-authored-by: cynarAI <cynarAI@users.noreply.github.com>
* ci: extend Web E2E job timeout to 60m on self-hosted runners
Co-authored-by: cynarAI <cynarAI@users.noreply.github.com>
* fix: keep github-broker-token off the core browser barrel
Export broker HMAC helpers only from @rakazo/core/node/github-broker-token so
Vite does not pull node:crypto into the web client and break Playwright signup.
Co-authored-by: cynarAI <cynarAI@users.noreply.github.com>
---------
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: cynarAI <cynarAI@users.noreply.github.com>
Catalog execute calls now merge parameters flattened next to an empty
arguments object and unwrap parameters nested under keys like parameters
or args, unless the tool itself takes that key. A failed validation lists
the required and received keys so the agent can correct its call, and the
prompt shows the expected call shape and says connected apps need no token.
Claude-Session: https://claude.ai/code/session_01Tgvrj34NMnaqvtgvruYQZZ
Co-authored-by: Claude <noreply@anthropic.com>
Catalog execute calls now accept arguments sent as a JSON string or flattened
next to the id, the computer image ships git and curl, and the evo deploy
rebuilds that image when its sources change.
Claude-Session: https://claude.ai/code/session_01Tgvrj34NMnaqvtgvruYQZZ
Co-authored-by: Claude <noreply@anthropic.com>
A live check showed the agent answering a business-idea question by creating a schedule that would run the analysis later. The schedule_create description now says never to use it for work the user wants now, however long.
A run of the real prompt against the local model showed reasoning written as chat text, internal tool names in a capabilities answer, and only a data fetch when asked to build a tool. The working principles now say that everything written is shown, to describe abilities in plain words, and that a request for a tool means building one.
The chart-links spec now waits for the chart or its error and reports browser errors, so the recurring 90-second timeout names its cause. The ZIP upload spec matches the file chip exactly, since the agent reply can quote the name.
Agents denied a connected GitHub and did not know they could install
skills: the prompt said "No plugins are connected yet." whenever only
installed tool sources existed, and the skill catalog never mentioned
skill_install. Connections and skills were also bound to the space they
were set up in, so a project never saw them.
- Name every connected app from the tools the run actually received,
including lazy catalogs and how to reach them.
- Tool sources and skills follow the user into every space; a skill in
the current space wins a name clash.
- Add shared working principles (do the work, verify before claiming,
keep it simple, build a missing tool as a tested script plus skill).
- Rewrite the skill catalog in plain words, mention skill_install, clip
long descriptions and count skills past the limit.
- Routine runs learn that nobody is waiting and history is not shown;
schedule prompts must be self-contained.
Claude-Session: https://claude.ai/code/session_01Tgvrj34NMnaqvtgvruYQZZ
Co-authored-by: Claude <noreply@anthropic.com>
A new skill_install agent tool reads every SKILL.md behind a public github.com
repository, folder or file link and saves each as one of the user's own,
editable skills. Only GitHub's API and raw hosts are contacted; invalid files
and name clashes are skipped and reported.
Claude-Session: https://claude.ai/code/session_01Tgvrj34NMnaqvtgvruYQZZ
Co-authored-by: Claude <noreply@anthropic.com>
* Add Second opinion and Founder builtin skills
Second opinion has a fresh reviewer approve the plan and inspect the build,
so whoever writes never approves their own work. Founder tests a business
idea with simulated roles and a crowd of 100 simulated buyers and ends in a
business plan card with a verdict.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Tgvrj34NMnaqvtgvruYQZZ
* Add Ship builtin skill for phased software work
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Tgvrj34NMnaqvtgvruYQZZ
---------
Co-authored-by: Claude <noreply@anthropic.com>
* Connect GitHub from a token alone, without a vendor account
Integrations only reached GitHub through Composio or Pipedream, which a
self-hosted instance does not have. A built-in GitHub row now opens
GitHub's prefilled token form, and the pasted token connects GitHub's
own MCP server through the existing installed-connector path. Web and
mobile.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Tgvrj34NMnaqvtgvruYQZZ
* Sync web catalogs for the GitHub connect strings
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Tgvrj34NMnaqvtgvruYQZZ
---------
Co-authored-by: Claude <noreply@anthropic.com>
* Allow ZIP uploads up to 5 GiB and stream them onto Docker computers
Repository archives could not be picked at all: application/zip was not an
allowed attachment type. ZIPs are now allowed with their own 5 GiB cap,
upload as a stream, and reach the bot's Docker computer through a new
streamed supervisor write that commits only after the body ended cleanly.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Tgvrj34NMnaqvtgvruYQZZ
* Use a disallowed type for the invalid-attachment check now that ZIP is allowed
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Tgvrj34NMnaqvtgvruYQZZ
---------
Co-authored-by: Claude <noreply@anthropic.com>
The strip under the header of a running 1:1 chat repeated what the header
already carried (a "Present" pill plus a persona line). The header's second
line now shows what the Oo is doing (Working, Thinking, waiting for input,
needs attention, or a delegation), and the bot's role while it rests. The
stage only appears in an empty chat and no longer repeats the name.
Claude-Session: https://claude.ai/code/session_01H3buE7EyYCfz8nYccLCcct
Co-authored-by: Claude <noreply@anthropic.com>
Runs used GitHub's artifact storage and cache service, which ran out of
the monthly included quota and blocked publishing. Caches and job
handoffs now stay on the self-hosted runner host, the desktop release
hands builds over through its draft release, and Windows waits for a
self-hosted runner instead of a GitHub-hosted one. A test enforces it.
Claude-Session: https://claude.ai/code/session_01R8L4XgqjAemFR2remB5hVY
Co-authored-by: Claude <noreply@anthropic.com>
Every main push since the concurrency change cancelled two of the three
image builds: the build job's concurrency group named only the ref, so
the app, updater and computer legs of one run shared it and cancelled
each other, and the publish job never ran. Main has not published an
edge image since. The build and publish groups now name the matrix leg.
The Playwright report publisher also read the jobs of a run's latest
attempt, so a re-run already in progress made it fail on an empty
conclusion. It now reads the attempt that finished.
Claude-Session: https://claude.ai/code/session_01R8L4XgqjAemFR2remB5hVY
Co-authored-by: Claude <noreply@anthropic.com>
Each project is now a single sidebar row with its own icon and color that
opens the project's coordinator conversation. The whole row drags to
reorder. The row menu gains Customize for name, icon and color. Inside
the coordinator conversation, an overview lists the project's agent
threads that need the user, are running, or recently finished.
Claude-Session: https://claude.ai/code/session_01Tgvrj34NMnaqvtgvruYQZZ
Co-authored-by: Claude <noreply@anthropic.com>
Creating a project whose name a member already uses (from the dialog, the
agent's create_space tool or the onboarding scan) now returns that project,
so the sidebar no longer lists two projects with one name. The conversation
picker lists the main agent first.
Claude-Session: https://claude.ai/code/session_01Tgvrj34NMnaqvtgvruYQZZ
Co-authored-by: Claude <noreply@anthropic.com>
* Fold a run's step messages behind its latest message
Long tool runs posted every step as its own bubble, so the answer drowned in
narration and a summary written before saving a file appeared twice. Web and
mobile now fold a run's text-only step messages behind one "N steps" line
above the run's latest message. The thread snapshot also stops replaying live
narration that was already posted, which showed steps again after a refresh.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Tgvrj34NMnaqvtgvruYQZZ
* Keep a run's last step visible above a card
A card such as the peer-message receipt has no words of its own, so folding
the narration into it hid everything the bot said. Steps now fold only into
a written answer or the live row; before a card the last step stays visible.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Tgvrj34NMnaqvtgvruYQZZ
---------
Co-authored-by: Claude <noreply@anthropic.com>
* Name 1:1 senders after their bot and reach the computer from a group
In a 1:1 chat bot messages fell back to the label "evOo" because only group
members were looked up; they now use the bot's name. The main conversation
and project chats show the computer button and open their lead bot's computer.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Tgvrj34NMnaqvtgvruYQZZ
* Translate the stage's collaboration lines
Subagent, handoff, delegation and peer-reply lines on the stage were English
in every language. They now go through the catalog, with German filled in.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Tgvrj34NMnaqvtgvruYQZZ
---------
Co-authored-by: Claude <noreply@anthropic.com>
* Name a run's chat once when its group carries the bot's name
A project's main conversation is named after its lead bot, so Today
showed "Chief · Chief". Web and mobile now share one title helper that
drops the repeated name.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Tgvrj34NMnaqvtgvruYQZZ
* Drop the "1:1 with" line under a conversation's title
The stage header repeated what the chat already shows, such as
"1:1 with Chief" under a project's name. The title and the phase pill
remain.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Tgvrj34NMnaqvtgvruYQZZ
* Let the stage's translated thinking lines speak while a bot works
A running bot raised a "working" awareness event whose English line,
such as "Chief is working on your request.", replaced the translated
thinking lines and added an "In progress" strip next to the phase pill.
The strip now only shows collaboration.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Tgvrj34NMnaqvtgvruYQZZ
* Ask bots to describe their steps without naming tools
Long runs showed lines such as "I'm using browser_navigate" in the chat.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Tgvrj34NMnaqvtgvruYQZZ
* Announce the stage phase as status and keep following after a tap
The working strip used to be the only status region while a bot worked; the
stage's phase pill now carries that role. A tap at the latest message no
longer stops the transcript from following new messages.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Tgvrj34NMnaqvtgvruYQZZ
---------
Co-authored-by: Claude <noreply@anthropic.com>
* Resume a waiting run after takeover even when its execution lease is gone
When resuming a run failed while it waited for the user, the run stayed
waiting_takeover but lost its execution lease. Taking over then bound no
run, so handing control back resumed nothing and the chat hung at the
computer. Takeover now binds the newest leaseless waiting run.
The stage also counted waiting runs as work and showed "working" while
the bot waited on the user; it now listens instead.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Tgvrj34NMnaqvtgvruYQZZ
* Tell every bot it is an agent in evOo, not the model behind it
Local models introduced themselves as the assistant product they were
trained as and even asked for that product's login. The identity block
now names evOo, and the fallback prompts say evOo instead of Rakazo.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Tgvrj34NMnaqvtgvruYQZZ
* Show runs waiting on the user in Today from every space
Today and its badge listed only runs of the selected space, while the
sidebar shows chats from all spaces. A chat waiting on the user in the
home space therefore showed "needs you" in the sidebar and "All quiet"
in Today. The activity list now spans every space the user belongs to,
carries each run's space, and opening a run switches to that space on
web and mobile.
The runs-list Postgres suite was not part of the integration run; it is
now, with a case for a waiting run in another space.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Tgvrj34NMnaqvtgvruYQZZ
* Keep a project's main conversation to its own asks
Every main conversation showed the inbox of all the user's spaces, so a
takeover waiting in the home chat sat above the composer of every
project. Only the home space's main conversation collects other spaces
now; a project shows its own items.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Tgvrj34NMnaqvtgvruYQZZ
* Also resume a waiting run that sits behind an older run's inactive lease
Inactive execution leases stay as fencing tombstones, so a run that lost
its lease can wait behind an expired lease of an earlier run. Takeover
now looks for the bot's waiting run whenever the lease is neither busy
nor bound to a waiting run. Journey 4f covers both the released and the
stale lease.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Tgvrj34NMnaqvtgvruYQZZ
* Translate the voice awareness labels and the computer card's state
The voice strip showed hardcoded English labels such as "In progress",
and the computer card showed its stored "Needs you" state untranslated
in German chats.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Tgvrj34NMnaqvtgvruYQZZ
---------
Co-authored-by: Claude <noreply@anthropic.com>