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 something that already exists in the user's memory, chosen by entityType — same taxonomy as penny_write (see its ladder). Notes take updates[] (patch or replace, up to 100); tasks require taskId (set status: "canceled" to remove a task — tasks are never trashed); profile blocks are upserts (blockName + content; memory_policy and persona are the two standing-instruction blocks — see penny_write's ladder). 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; op:cancel discards and op:undo recovers the previous version. Read skills view:history for version IDs; op:restore_revision with skillId, historyId, expectedUpdatedAt previews a restore. op:restore with skillId recovers a deleted skill, disabled. No invocation waiting period applies. Trackers take trackerId and patch only the fields you pass (name/description/unit/kind/targetSpec/archived — archiving is the retire path, there is no tracker delete; private trackers only, not yet workspace-shared ones); rhythms are re-defined by full manifest; entityType: "rhythm_run" completes a run (runId + status). Projects take projectId + expectedRevision + operationId + a sparse patch (reread and reconcile on conflict); op: "restore_revision" restores selected fields/resourceIds from a historyId as a new revision. Tracker entries take trackerId + entryId + expectedUpdatedAt + the full payload. op: "restore" un-trashes notes or tracker entries by ids, or a Project by projectId.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| op | No | op:"restore" un-trashes notes or tracker entries by `ids`. | |
| ids | No | op:"restore" — ids to un-trash (max 100). | |
| goal | No | entityType:"rhythm" (required) — what the run should do. On entityType:"skill" this is `instructions`. | |
| kind | No | entityType:"tracker" — habit | metric | goal | log | status | custom. | |
| name | No | Area/project/tracker name; entityType:"skill" names prepare a preview of the replacement (rhythm names upsert). | |
| unit | No | entityType:"tracker" — unit of measure. | |
| actor | No | entityType:"task"/"area"/"project"/"heading" — who took the action (me|agent), written to the activity ledger. | |
| notes | No | entityType:"task"/"area"/"project" — markdown body. | |
| order | No | entityType:"task"/"area"/"project"/"heading" — sort order. | |
| orgId | No | entityType:"area"/"project"/"heading" (required) — the container to update. | |
| owner | No | entityType:"task" — assignee. | |
| patch | No | Project patch: full schema on penny_write. | |
| runId | No | entityType:"skill_run" (required) — the run to complete; same field on the legacy "rhythm_run". | |
| scope | No | Profile: global|workspace. Projects: private; workspace requires workspaceId. | |
| title | No | entityType:"task"/"heading" — the title/label. | |
| areaId | No | entityType:"project" — the area the project belongs to. | |
| 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 | entityType:"task" (required) — the task to update. | |
| whenAt | No | entityType:"task"/"project" — schedule date (ms epoch). | |
| content | No | entityType:"profile" (required) — the new block content. | |
| deliver | No | entityType:"skill": required with trigger (also rhythm); omit for on-demand. See penny_write for shape. | |
| enabled | No | entityType:"skill": false pauses due signals, true resumes; requires skillId. MyPenny does not run skills. | |
| entryId | No | ||
| payload | No | ||
| posture | No | entityType:"skill" with a `trigger` set (or legacy "rhythm") — read | propose | act. | |
| skillId | No | entityType:"skill" pause/resume — the skill id (required with enabled). | |
| trigger | No | entityType:"skill": optional (required for rhythm). Omit to return to on-demand. MyPenny does not run it; the connected agent receives due signals. See penny_write for shape; ALWAYS set IANA timezone, default UTC. | |
| updates | No | entityType:"note" — patch or supersede existing notes (up to 100). | |
| archived | No | Area/project/tracker: archive; false reactivates. Tracker definitions retire only this way. | |
| deadline | No | entityType:"task"/"project" — hard due date (ms epoch). | |
| snapshot | No | Skill restore_revision: which side of the history entry to restore (default before). Select after to recover a change that was undone. | |
| agentNote | No | ||
| blockName | No | entityType:"profile" (required) — the profile block to upsert. | |
| dependsOn | No | entityType:"task" — full replacement set of taskIds that must complete first. | |
| historyId | No | restore_revision: Project history item or skill history item. Skill restoration prepares a preview; requires skillId and expectedUpdatedAt. | |
| linkNotes | No | entityType:"task" — note ids to link to this task. | |
| projectId | No | entityType:"heading" (required) — the project the heading belongs to. | |
| trackerId | No | entityType:"tracker" (required) — the tracker to update. Only the fields you pass are patched — omit any you don't want to change. | |
| entityType | Yes | Item type. | |
| proposalId | No | Skill change proposal returned by an edit. op:apply commits after user review; cancel discards; undo restores the previous version if no later edit exists. | |
| provenance | No | entityType:"rhythm_run" — accountability summary of what the run did (ids/labels, never full content). | |
| recordedAt | No | ||
| recurrence | No | entityType:"task" — makes the task repeat, or (on an existing repeating task) changes its schedule. Setting `clearFields: ["recurrence"]` ENDS the series (task becomes a one-off; completed occurrences stay as history) but must target `currentOccurrenceId`, not a stale/completed id. | |
| targetSpec | No | tracker: replaces the whole target spec; shape as penny_write. | |
| whenBucket | No | entityType:"task"/"project" — undated bucket; mutually exclusive with whenAt. | |
| clearFields | No | entityType:"task" — names of optional fields to UNSET on the task. | |
| description | No | entityType:"skill": REQUIRED use-when description; also rhythm. tracker: meaning; log trackers must document payload shape. | |
| operationId | No | Project receipt key; identical retries only. | |
| resourceIds | No | Restore selected links. | |
| instructions | No | entityType:"skill" (required) — the saved know-how (generalizes the rhythm "goal"). | |
| retrievalPlan | No | entityType:"skill" (or legacy "rhythm") — OPTIONAL deterministic steps for a bounded tier. | |
| expectedRevision | No | Project edit revision from Brief; reconcile conflicts. | |
| expectedUpdatedAt | No | Source version from the read. |