Skip to content

Agents ask before they act, tickets tell the whole story, and the agents read as a team - #55

Merged
danielehrhardt merged 2 commits into
mainfrom
feat/human-experience
Oct 4, 2026
Merged

danielehrhardt merged 2 commits into
mainfrom
feat/human-experience

Conversation

@danielehrhardt

Copy link
Copy Markdown
Contributor

Questions and approvals

  • An agent can ask the human (ask_human, with suggested answers) or ask
    for an OK before a step that sends, pays or deletes something nobody
    asked for (request_approval). The run stands still instead of pretending
    to be done; the human is notified and answers with one click in the
    chat, the inbox, the task, the phone, or by replying in Slack, Telegram
    or Teams (only the person marked as the owner can answer there). The run
    continues where it stopped; stopping it withdraws the question.
  • Migration 50: questions table, messaging_users.is_owner.

Tickets

  • Priority, due date and labels on every ticket; urgent ones start first
    and the agent is told the deadline. Filters by them on the board.
  • A timeline per ticket: every delivery with its result, feedback, notes
    agents leave (task_note), blocks, pull requests, questions and answers.
  • Blocked says why (needs input, failed, stopped, cut off by a restart)
    and offers the matching way on; a ticket whose agent set a follow-up
    waits instead of landing in review; what each ticket cost and how long
    the agent worked. Approve / Request changes / Reopen in one click.
  • Agents: task_get, task_message, task_note; richer task_create/update.
  • Migration 51: ticket columns, task_events.

Team

  • Every agent has a role and a lead (the built-in agent leads by default);
    agents are told who does what and who they report to. Reporting lines
    grant nothing; reach and permissions are unchanged.
  • Org chart on the Agents page, "Needs you" filter, truthful status
    (Working in 2 chats, Queued, Needs your answer, Last run failed with a
    link to the run and Dismiss), "On its plate" on the agent page.
  • Handoffs both ways: the handoff card opens the teammate's chat, the
    handed-over chat links back. Messages from automations, the board or
    other agents are labelled, never shown as the human's.
  • Duplicate an agent; no new chats with a switched-off agent (and a
    Switch on bar in its chats); the app learns active runs on connect.
  • Migration 53: agents.role / reports_to / failed_run_id,
    messages.source, and a backfill that also runs after a restore.

Checks

  • pnpm typecheck: all packages pass
  • Core tests: 1128 pass, 10 skip, 0 fail (after merging main)
  • Desktop build and phone type check pass
  • Checked in the browser: questions and approvals, ticket sheets and timeline, agents grid, org chart, agent page with "On its plate", handoff card and the handed-over chat, failed-run sheet with Dismiss, switched-off chat, Team settings; light and dark

Migrations are 50, 51 and 53 (main already has 30 and 40).

…nts read as a team

Questions and approvals
- An agent can ask the human (ask_human, with suggested answers) or ask
  for an OK before a step that sends, pays or deletes something nobody
  asked for (request_approval). The run stands still instead of pretending
  to be done; the human is notified and answers with one click in the
  chat, the inbox, the task, the phone, or by replying in Slack, Telegram
  or Teams (only the person marked as the owner can answer there). The run
  continues where it stopped; stopping it withdraws the question.
- Migration 50: questions table, messaging_users.is_owner.

Tickets
- Priority, due date and labels on every ticket; urgent ones start first
  and the agent is told the deadline. Filters by them on the board.
- A timeline per ticket: every delivery with its result, feedback, notes
  agents leave (task_note), blocks, pull requests, questions and answers.
- Blocked says why (needs input, failed, stopped, cut off by a restart)
  and offers the matching way on; a ticket whose agent set a follow-up
  waits instead of landing in review; what each ticket cost and how long
  the agent worked. Approve / Request changes / Reopen in one click.
- Agents: task_get, task_message, task_note; richer task_create/update.
- Migration 51: ticket columns, task_events.

Team
- Every agent has a role and a lead (the built-in agent leads by default);
  agents are told who does what and who they report to. Reporting lines
  grant nothing; reach and permissions are unchanged.
- Org chart on the Agents page, "Needs you" filter, truthful status
  (Working in 2 chats, Queued, Needs your answer, Last run failed with a
  link to the run and Dismiss), "On its plate" on the agent page.
- Handoffs both ways: the handoff card opens the teammate's chat, the
  handed-over chat links back. Messages from automations, the board or
  other agents are labelled, never shown as the human's.
- Duplicate an agent; no new chats with a switched-off agent (and a
  Switch on bar in its chats); the app learns active runs on connect.
- Migration 53: agents.role / reports_to / failed_run_id,
  messages.source, and a backfill that also runs after a restore.
# Conflicts:
#	apps/desktop/src/components/agents/agent-form.tsx
#	apps/desktop/src/components/chat/message-blocks.tsx
#	apps/desktop/src/components/chat/thread.tsx
#	apps/desktop/src/lib/api.ts
#	packages/core/src/db/migrations.ts
#	packages/core/src/runner/runner.ts
#	packages/core/src/runner/stream.ts
#	packages/core/src/server/ws.ts
#	packages/core/src/services/followups.ts
#	packages/core/src/tasks/service.ts
#	packages/core/test/fixtures/fake-claude.ts
@danielehrhardt
danielehrhardt merged commit 6b6a3c7 into main Oct 4, 2026
5 of 6 checks passed
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