Skip to content

Let the Godmode agent edit cosmetic fields of reveal agents and withdraw duplicate human tasks of its team - #208

Merged
danielehrhardt merged 3 commits into
mainfrom
godmode/58-let-the-godmode-agent-edit-cosmetic-fiel
Oct 19, 2026
Merged

danielehrhardt merged 3 commits into
mainfrom
godmode/58-let-the-godmode-agent-edit-cosmetic-fiel

Conversation

@danielehrhardt

Copy link
Copy Markdown
Contributor

I made both changes. Typecheck passes, the related core test files pass (244 tests), and the branch is up to date with origin/main.

Godmode can edit how reveal agents look

  • What changed: agent_update lets the built-in agent set role, description, avatar, color, character and personality on an agent that can reveal secrets and belongs to another workspace. These fields are accepted only on their own: a call that also touches anything else (instructions, model, enabled, name, reportsTo, permissions, MCP servers, browser, subagents, heartbeat, workspace) is refused as before. An empty update is refused too.
  • One condition I added: the built-in agent's own run must be able to read secrets in plain text. Description and personality are copied word for word into the target agent's CLAUDE.md. Without this condition, a run that can't see secrets could put text in front of an agent that can. Your built-in agent reads secrets and is global, so this covers the 7 agents named in the ticket.
  • Still guarded: the "controls this computer" check and the virtual-machine check apply as before, and the change is audit-logged as agent.update with the fields.
  • Code: packages/core/src/mcp/tools.ts. The tool description now tells the built-in agent which fields it may set.

Leads can withdraw their team's tasks for you

  • What changed: human_task_cancel lets the built-in agent, or any agent that manages agents, withdraw an open task created by an agent that reports to it, directly or further down.
  • Reason: required. It shows on the task as ": ", for example "Godmode: Duplicate of H-177".
  • Never touched: your own tasks, closed tasks, and questions an agent asked you.
  • One case I refuse: if the task is what a board ticket is blocked on, the lead can't withdraw it. Otherwise the ticket would stay blocked forever, because nothing wakes the agent that created it. The refusal tells the lead to ask that agent through the ticket (task_message) to withdraw it itself.
  • Not done: waking the creating agent after a lead withdraws its task. That needs a new kind of marker in the chat plus changes to the desktop and mobile apps, so I left it out to keep the diff small. In a plain chat nothing is left waiting; the task just leaves your list, the same as when an agent withdraws its own task today.
  • Code: packages/core/src/services/humanTasks.ts. The audit entry also records which agent created the task.

Tests

  • packages/core/test/mcp.test.ts: the built-in agent can change only the look fields, and only from a run that reads secrets; mixed or empty updates and other managers are refused; the audit entry is written.
  • packages/core/test/human-tasks.test.ts: who may withdraw (a lead further up, the built-in agent) and who may not (a lead that doesn't manage agents, a manager from another team); reason required; your own task; an already withdrawn task; the blocked-ticket refusal.
  • Both new tests fail without the source change.

A reviewer agent checked the change twice. Its findings are fixed; the blocked-ticket refusal is one of them.

After the merge, the Godmode agent still has to cancel H-182 (duplicate of H-177) and H-167 (Matchmade Growth, paused), as the ticket says. Neither is tied to a board ticket, so the new refusal won't block them.


Task #58 · done by Self-Healer with Godmode Bot

…team's human tasks

agent_update: the built-in agent, from a run that reads secrets itself, may set
role, description, avatar, colour, character and personality on a reveal-mode
agent of another workspace. Everything else stays human-only.

human_task_cancel: a manager (and the built-in agent) may take back an open
task an agent reporting to it gave, directly or further down. A reason is
required and shows on the task. The human's own tasks and questions stay.
A lead can't take back a task that holds up its agent's blocked ticket: only
that agent picks the ticket up again. The reason names the lead without
repeating that it was taken back, an empty agent_update stays guarded, and
agent_update tells the built-in agent which fields it may set.
The check runs after the status and question checks, so a closed task or a
ticket blocked for another reason gets the real answer.
@danielehrhardt
danielehrhardt merged commit 0d7708a into main Oct 19, 2026
8 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