penny_edit
When the user corrects something on file, or a task, tracker, skill, or block needs to change, edit the existing item rather than writing a duplicate. Modify what already exists; entityType uses the same taxonomy as penny_write (see ladder). Notes: updates[] patch/replace, max100. Tasks: taskId; cancel via status:canceled, never Trash. Profile: blockName + content upsert; memory_policy and persona hold standing instructions. When the user tells you what to save, skip, check, or surface, update their memory_policy block in the same turn as a general rule in their words. Skill redefinition prepares a preview, not a save; wait for user approval before op:apply with proposalId. cancel discards; undo recovers the prior version if no later edit exists. skills/history supplies historyId; restore_revision with skillId/historyId/expectedUpdatedAt previews recovery. restore with skillId recovers deleted skills disabled. No invocation waiting period. Trackers: trackerId + sparse name/description/unit/kind/targetSpec/archived; retire by archiving, no delete. Private trackers only; workspace trackers unsupported. Rhythms: full manifest. skill_run/rhythm_run: complete runId + status. Projects: projectId + expectedRevision + operationId + sparse patch; reread and reconcile on conflict. restore_revision restores fields/resourceIds from historyId as a new revision. Tracker entries: trackerId + entryId + expectedUpdatedAt + full payload. restore un-trashes note/tracker_entry ids or Project projectId.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| op | No | restore: un-trash notes/tracker entries by ids. | |
| ids | No | restore: IDs to un-trash; max 100. | |
| goal | No | rhythm: required run instructions; skill uses instructions instead. | |
| kind | No | tracker: habit|metric|goal|log|status|custom. | |
| name | No | area/project/tracker: name. entityType:"skill": previews replacement; rhythm: upserts. | |
| unit | No | tracker: unit of measure. | |
| actor | No | task/area/project/heading: actor (me|agent) recorded in activity ledger. | |
| notes | No | task/area/project: markdown body. | |
| order | No | task/area/project/heading: sort order. | |
| orgId | No | area/project/heading: required container ID to update. | |
| owner | No | task: assignee. | |
| patch | No | Project patch: full schema on penny_write. | |
| runId | No | skill_run/rhythm_run: required run ID to complete. | |
| scope | No | Profile: global|workspace. Projects: private; workspace requires workspaceId. | |
| title | No | task/heading: title/label. | |
| areaId | No | project: parent area. | |
| fields | No | Restore selection: field names or step:<stepId>; fields/resourceIds required. | |
| status | No | task: open|in_progress|done|canceled. Repeating completion returns nextTaskId: act on that new occurrence; the completed ID rejects further status writes. skill_run/rhythm_run: done|error|skipped. | |
| taskId | No | task: required ID to update. | |
| whenAt | No | task/project: schedule date (ms epoch). | |
| content | No | profile: required new block content. | |
| deliver | No | entityType:"skill": required with trigger; rhythm: required. Omit for on-demand. Shape: penny_write. | |
| enabled | No | skill: false pauses due signals, true resumes; requires skillId. Penny does not run skills. | |
| entryId | No | ||
| payload | No | ||
| posture | No | entityType:"skill" with trigger, or rhythm: read|propose|act. | |
| skillId | No | skill: ID required with enabled to pause/resume. | |
| trigger | No | entityType:"skill": optional; rhythm: required. Omit to return to on-demand. Penny does not run it; connected agents receive due signals. Shape: penny_write. ALWAYS set IANA timezone; default UTC. | |
| updates | No | note: patch or supersede up to 100 existing notes. | |
| archived | No | Area/project/tracker: archive; false reactivates. Tracker definitions retire only this way. | |
| deadline | No | task/project: hard due date (ms epoch). | |
| snapshot | No | skill restore_revision: history side; default before. after recovers an undone change. | |
| agentNote | No | ||
| blockName | No | profile: required block to upsert. | |
| dependsOn | No | task: full prerequisite taskId set; replaces all. | |
| historyId | No | restore_revision: Project/skill history ID. Skill restore previews; requires skillId and expectedUpdatedAt. | |
| linkNotes | No | task: note IDs to link. | |
| projectId | No | heading: required parent Project. | |
| trackerId | No | tracker: required ID to update; only supplied fields change. | |
| entityType | Yes | Item type. | |
| proposalId | No | Returned skill proposal. apply commits after user review; cancel discards; undo restores the previous version only if no later edit exists. | |
| provenance | No | rhythm_run: accountability summary (IDs/labels, never full content). | |
| recordedAt | No | ||
| recurrence | No | task: set/change recurrence. clearFields:["recurrence"] ends the series, making the task one-off and preserving completed history. Target currentOccurrenceId, not a stale/completed ID. | |
| targetSpec | No | tracker: replaces the whole target spec; shape as penny_write. | |
| whenBucket | No | task/project: undated bucket; mutually exclusive with whenAt. | |
| clearFields | No | task: optional fields to unset. | |
| description | No | entityType:"skill"/rhythm: required use-when description. tracker: meaning; log trackers must document payload shape. | |
| operationId | No | Project receipt key; identical retries only. | |
| resourceIds | No | Restore selected links. | |
| instructions | No | skill: required saved know-how; replaces rhythm goal. | |
| retrievalPlan | No | entityType:"skill"/rhythm: optional deterministic steps for a bounded tier. | |
| expectedRevision | No | Project revision from Brief; reconcile conflicts. | |
| expectedUpdatedAt | No | Source version from read. |