docs/adr/0047-agent-local-work-creation.md

ADR 0047: Explicit agent creation of local work

Date: 2026-10-18 Status: User-authorized source change. Native and live-account acceptance pending.

Decision

Extend ADR 0042 with explicit account-scoped MCP grants for create_project and track_commitment. When selected by the user, these grants let an agent save local work immediately without a human approval for each item. Existing grants, default grants and the Reply assistant preset do not gain these tools. Email content cannot grant permissions.

Creation uses the existing workspace service validation and encrypted records. Projects require at least one available source and exactly one account. Commitments require available same-account source and evidence mail, text, reason and an open status: needs-reply, needs-work or waiting. An optional project must also have only that account and available same-account sources. Preserve date-only deadlines, timed local follow-ups and initial history from ADR 0043. These records use the existing Projects, Today and Calendar views. They do not create external calendar events or operating-system notifications.

Add separately granted list_projects and list_commitments for discovery and readback. Both require an explicit account. Omit mixed-account projects and commitments linked to them, even when another account is also granted. Omit items with unavailable or foreign source/evidence links, including commitment history. Return closed commitments when their links pass the same checks. This conservative omission prevents labels, identifiers and historical text from leaking through a partially permitted record.

Each create requires a caller-generated UUID requestId, retained with its exact input. Derive the existing record ID from agent ID, tool and request ID. Return an identical retry only if its normalized payload matches, its revision is still 1, and its grant, account and sources remain valid. Changed payloads and later user edits conflict without writing. Distinct request IDs create distinct deliverables even when their text matches. After an uncertain response, read scoped saved work and retry only the identical request with its original request ID. Revocation, account removal or missing evidence blocks replay. This uses no new storage kind, migration or plaintext index.

The tools cannot complete, cancel, reopen or update work, combine accounts, approve proposals, send mail, or alter mailbox state. Existing immutable mail-action proposals, fresh approval/execution validation, sending opt-in and unknown-send handling retain their existing behavior. No automatic extraction or accuracy claim follows from this interface.

Verification

Use synthetic accounts through real MCP HTTP transport to check old/default grant denial, account and evidence boundaries, invalid dates and statuses, immediate persistence and readback, unchanged retry results, payload conflicts, user edits, revocation and source/account removal. Check the mounted permission labels and unchanged Reply assistant preset. Run the repository suite, build and isolated MCP handshake. Native interaction, installed-app behavior and real provider operations require separate proof and authority.