Skip to content

feat(joe): work with Joe from repo sessions; Tasks replaces the Joe chat - #702

Merged
alari76 merged 1 commit into
mainfrom
feat/joe-in-sessions
Sep 30, 2026
Merged

alari76 merged 1 commit into
mainfrom
feat/joe-in-sessions

Conversation

@alari76

@alari76 alari76 commented Sep 30, 2026

Copy link
Copy Markdown
Contributor

Slice 1 of docs/JOE-REPO-COLLABORATION-MAINTENANCE-SPEC.md (§2–§5). Stacked on #698.

Talking to Joe in a repo session

  • A leading @Joe, or the composer's Ask Joe action, addresses Joe. The composer shows "To Agent Joe — the coding agent won't see this" before you send.
  • The request is recorded in the session transcript as "You → Agent Joe" and reaches Joe as a durable Session Request. It carries the repo, branch, request id, recent conversation and linked tasks.
  • Joe answers in place with reply_in_session. Joe's exchanges never go to the coding agent.
  • If Joe has no harness yet, the session says so ("choose one in Tasks") instead of failing silently.

Tasks, provenance and milestones

  • Tasks record originSessionId / originRequestId.
  • Milestones are posted back to the originating conversation as task cards: accepted, decision needed, blocked, ready for review.
  • Cards read the live task, so a decision answered in chat or in Tasks resolves in both places. Stale answers still get a 409. Only the newest card for a task shows controls.
  • New execution substate: running / queued / idle. A start request or an answer shows as Queued until an attempt is actually running.

Execution ownership

  • Sessions have a revisioned controller (user / joe).
  • The user can hand a session over to Joe. Joe can take over only with the requestId of an explicit @joe request in that session.
  • Take back control bumps the revision. Joe's send_to_session with an older revision is refused. send_to_child / resume_child also refuse once the user has taken a child back.
  • While Joe controls a session, a "Supervised by Agent Joe · Task: …" banner shows and ordinary messages pause (@joe still works).

Navigation

  • The sidebar's Agent Joe chat entry is now Tasks, with the attention badge and a pulse when Joe waits on an approval.
  • Tasks has a per-repo overview, sections for decisions / review / running / queued / to do / closed, New task, and first-run harness setup. There is no chat composer.
  • Joe's transcript remains a read-only activity log (/joe), with its approval prompts and harness/model/permission settings.
  • Joe's instructions are template v11, with a new "Working in Repo Sessions" section.

Verification

  • New tests: bridge (requests, replies, milestones, handover fencing), task substate, InputBar addressing/lock, chat task cards, @Joe parsing.
  • Full suite: 210 files / 4012 tests pass. Lint and tsc -b are clean.
  • Ran an isolated instance (separate HOME, port 32399) in headless Chromium:
    • Tasks view and sidebar entry render.
    • @Joe shows the recipient chip and posts attributed messages.
    • Acting as Joe over REST: reply, task card with decision, and handover banner render.
    • Answering the decision from chat cleared the badge, and Tasks showed the task as Queued.
    • Server refused Joe taking back control, and refused a stale-revision instruction.

Not browser-tested against a live Joe process: the isolated instance had no signed-in harness.

🤖 Generated with Claude Code

@alari76
alari76 force-pushed the feat/joe-automation-tools branch from d7cba74 to 1ea54a2 Compare September 30, 2026 08:00
@alari76
alari76 force-pushed the feat/joe-in-sessions branch from 23abd87 to 5051004 Compare September 30, 2026 08:01
Base automatically changed from feat/joe-automation-tools to main September 30, 2026 08:02
@alari76
alari76 changed the base branch from feat/joe-automation-tools to main September 30, 2026 08:02
@joe (or the composer's Ask Joe action) addresses Agent Joe from any repo
session. The request is recorded in that transcript, attributed, and
delivered to Joe as a durable Session Request with the repo, recent
conversation and linked tasks. Joe answers in the same conversation with
reply_in_session; the coding agent never sees the exchange.

Tasks started from a session record their origin, and milestones (task
accepted, decision needed, blocked, ready for review) are posted back
there as task cards reading the live task, so a decision answered in chat
or in Tasks resolves everywhere. Tasks gain an execution substate so
queued work (start requested, answered) is not shown as running.

One controller per execution: the user can hand a session to Joe, Joe
can take over only on an explicit @joe request, and Take back control
fences later instructions by controller revision. New Joe tools:
reply_in_session, get_session_context, take_over_session,
send_to_session.

The sidebar's Agent Joe chat entry becomes Tasks (with the attention
badge and a per-repo overview); Joe's transcript stays reachable as a
read-only activity log that keeps its approval prompts and agent settings.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@alari76
alari76 force-pushed the feat/joe-in-sessions branch from 5051004 to ae45fe4 Compare September 30, 2026 08:03
@alari76
alari76 merged commit 8cba077 into main Sep 30, 2026
2 checks passed
@alari76
alari76 deleted the feat/joe-in-sessions branch September 30, 2026 08:06
@alari76 alari76 mentioned this pull request Sep 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant