Repository navigation
feat: let agents ask without waiting and show their conversations read only - #915
Conversation
There was a problem hiding this comment.
Important
The reply command pasted into an agent's terminal is a Bash heredoc, so it fails in PowerShell 5.1, cmd, and nushell.
Reviewed changes across the stacked inbox commits on feat/agent-conversations: questions from ext: addresses, the desktop and mobile inbox, and agent-to-agent ask and conversation reads.
- External inbox. Questions from
ext:addresses are stored with expiry, a 20-question pending cap, and 7-day history, and can be asked, answered, and listed from the desktop, the phone, andalera inbox. - Ask without waiting.
alera orchestration ask --no-waitreturns the question id immediately. A worker's question still routes to its dispatch coordinator.alera inbox wait --questionconsumes the answer so it is not pasted again. - Read-only conversations.
inbox.conversationsandinbox.conversationgroup agent messages and never mark them read. Idle agent threads are deleted after 7 days unless a row is still queued or tied to an unfinished task or dispatch.
ℹ️ Installed agents still only know blocking ask
Workers follow skills/alera-orchestration, which still documents only blocking alera orchestration ask. --no-wait, inbox wait --question, and the read-only conversation commands are absent, so installed agents will not use this phase unless that skill is updated in the same change.
Technical details
# Document no-wait ask and conversation reads
## Affected sites
- `skills/alera-orchestration/SKILL.md` — still says workers ask through blocking `alera orchestration ask`
- `skills/alera-orchestration/references/worker.md:26` — same contract, no `--no-wait`
- `skills/alera-orchestration/references/messaging.md` — no `inbox wait` or conversation commands
## Required outcome
- A worker can ask without blocking the turn and can read the answer with `alera inbox wait --question` instead of waiting for paste.
- Read-only `alera inbox conversations` / `alera inbox conversation` are documented if agents are expected to use them.ℹ️ Nitpicks
hub_reverse_policy_testschecks the inbox allowlist but omitsinbox.conversationsandinbox.conversation, so dropping those verbs stays green.
grok-4.7 | 𝕏
7f629e8 to
1a0a1bd
Compare
There was a problem hiding this comment.
Important
A follow-up inbox.wait settles on earlier messages in the root thread, so it never parks for that follow-up's answer.
Reviewed changes since the prior review at 7f629e8a3: the conversation commit was rebased onto feat/inbox-mobile and now resolves follow-up waits through the root thread, notifies waiters before paste, and pages conversations by the whole thread.
- Follow-up wait lookup.
inbox.waiton a non-inbox question loads that message's root thread, so a reply stored there can be found. - Paste after notify. Send and reply wake parked waiters before injecting, so an answer consumed by
inbox.waitorcheck --waitis not also pasted. - Thread-wide listing. Participant and workspace filters match any row in a thread, while order and
nextBeforeuse the thread's latest sequence.
grok-4.7 | 𝕏
1a0a1bd to
2877a96
Compare
2877a96 to
6f3199d
Compare
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes since the prior review at 1a0a1bd6: follow-up waits now ignore earlier messages in the root thread, and the branch was rebased onto the current inbox base.
- Follow-up wait filter.
inbox.waiton an agent question settles only on a reply whosereply_to_idis that question, so an earlier root answer stays unread and the wait stays pending. - Regression test. The follow-up test now polls before that reply exists and expects
pending, then expects a singleansweredmessage. - Hub allowlist test.
hub_reverse_policy_testsnow assertsinbox.conversationsandinbox.conversation. - Rebase. The branch now sits on
feat/inbox-mobileat0cd515e8, which already uses a portable reply hint instead of a Bash heredoc.
grok-4.7 | 𝕏
6f3199d to
fabd437
Compare
391e228 to
1b3cba7
Compare
1b3cba7 to
c02fe7b
Compare

Summary
Phase 2 of the inbox: the conversation model also covers messages between agents. Task control stays separate.
alera orchestration ask --no-wait: returns the question id at once and keeps the existing routing (a worker's question still goes to its dispatch's coordinator). The answer is pasted on the asker's next turn, or the asker reads it earlier withalera inbox wait --question <id>, which consumes it so it is not pasted again.inbox.conversationsandinbox.conversationgroupstatus,handoff,merge_readyanddecision_gatemessages between terminals by thread. A group send is one thread, with a generated id and no root row.conversationRevisiontriggers drive aconversationsChanged {revision}event.alera inbox conversationsandalera inbox conversation.Stacked on the mobile inbox PR.
Validation
conversation_store_tests: grouping, control exclusion, the participant filter, revision scope, and pruning that keeps unread, recent, active-task and control messages.conversation_requests_tests:ask --no-waitplusinbox.waitconsuming the answer; the phone reading conversations without consuming them; the event.cargo test -p alera-core --features runtimeandcargo test -p alera-clipass, and clippy is clean.ask --no-waitto that terminal, a reply sent withreply --body-stdinfrom inside it, andinbox waitreturnedanswered.inbox conversationsandinbox conversationlisted and showed the thread.Risk
Retention newly deletes old agent conversation rows (read, delivered, expired or obsolete) after 7 days. Previously nothing was pruned.