Skip to main content
Glama

Server Details

Portable AI memory you own. Keep memories and notes across Claude, ChatGPT, and other AI tools.

Ownership verified
Status
Healthy
Uptime
100.0% over 21 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A4.2/5.0

Scored across 7 tools

Disambiguation4/5

Tools are mostly distinct: penny_write creates, penny_edit modifies, penny_delete trashes, and penny_read retrieves, while session/setup/skill tools have narrow roles. Some overlap exists between penny_read, penny_get_skill, and penny_session_start for reading different memory/skill snapshots, but descriptions clarify boundaries.

Naming Consistency5/5

All tools use a consistent penny_ prefix and snake_case, with predictable action-oriented suffixes like write, read, edit, and delete. Minor variation in session_start/start_setup does not break the overall pattern.

Tool Count5/5

Seven tools is well within the 3-15 ideal range and each tool maps to a core operation of the personal memory system. Several tools are broad multi-operation interfaces, but the count remains well-scoped.

Completeness5/5

The surface covers create/read/update/delete for memories, plus session orientation, setup, and operating skill retrieval. No obvious lifecycle gap exists for a personal memory server.

Available Tools

7 tools
penny_delete
DestructiveIdempotent
Inspect

Move to Trash. Project: projectId + expectedRevision + operationId; penny_edit op:restore recovers. Repeat in_progress with the same operationId; report partial_recovery conflicts. Note/tracker_entry: ids (max100); skill/rhythm: one id; profile_block: ids are block names. Tag/link removal uses the identifiers below. Tasks are canceled via penny_edit; tracker definitions are archived, not deleted.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsNonote/tracker_entry: IDs to trash, max 100. rhythm/skill: exactly one ID. profile_block: block names to trash.
tagANotag_relation: required edge endpoint to remove.
tagBNotag_relation: required other endpoint.
scopeNoProfile block scope; Project private overrides defaults, workspace requires workspaceId.
noteIdsNotracker_note_link: required note IDs to unlink.
projectIdNo
entityTypeYesWhat to trash.
operationIdNo
trackerEntryIdNotracker_note_link: required entry to detach notes from.
expectedRevisionNo
penny_edit
DestructiveIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
opNorestore: un-trash notes/tracker entries by ids.
idsNorestore: IDs to un-trash; max 100.
goalNorhythm: required run instructions; skill uses instructions instead.
kindNotracker: habit|metric|goal|log|status|custom.
nameNoarea/project/tracker: name. entityType:"skill": previews replacement; rhythm: upserts.
unitNotracker: unit of measure.
actorNotask/area/project/heading: actor (me|agent) recorded in activity ledger.
notesNotask/area/project: markdown body.
orderNotask/area/project/heading: sort order.
orgIdNoarea/project/heading: required container ID to update.
ownerNotask: assignee.
patchNoProject patch: full schema on penny_write.
runIdNoskill_run/rhythm_run: required run ID to complete.
scopeNoProfile: global|workspace. Projects: private; workspace requires workspaceId.
titleNotask/heading: title/label.
areaIdNoproject: parent area.
fieldsNoRestore selection: field names or step:<stepId>; fields/resourceIds required.
statusNotask: 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.
taskIdNotask: required ID to update.
whenAtNotask/project: schedule date (ms epoch).
contentNoprofile: required new block content.
deliverNoentityType:"skill": required with trigger; rhythm: required. Omit for on-demand. Shape: penny_write.
enabledNoskill: false pauses due signals, true resumes; requires skillId. Penny does not run skills.
entryIdNo
payloadNo
postureNoentityType:"skill" with trigger, or rhythm: read|propose|act.
skillIdNoskill: ID required with enabled to pause/resume.
triggerNoentityType:"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.
updatesNonote: patch or supersede up to 100 existing notes.
archivedNoArea/project/tracker: archive; false reactivates. Tracker definitions retire only this way.
deadlineNotask/project: hard due date (ms epoch).
snapshotNoskill restore_revision: history side; default before. after recovers an undone change.
agentNoteNo
blockNameNoprofile: required block to upsert.
dependsOnNotask: full prerequisite taskId set; replaces all.
historyIdNorestore_revision: Project/skill history ID. Skill restore previews; requires skillId and expectedUpdatedAt.
linkNotesNotask: note IDs to link.
projectIdNoheading: required parent Project.
trackerIdNotracker: required ID to update; only supplied fields change.
entityTypeYesItem type.
proposalIdNoReturned skill proposal. apply commits after user review; cancel discards; undo restores the previous version only if no later edit exists.
provenanceNorhythm_run: accountability summary (IDs/labels, never full content).
recordedAtNo
recurrenceNotask: set/change recurrence. clearFields:["recurrence"] ends the series, making the task one-off and preserving completed history. Target currentOccurrenceId, not a stale/completed ID.
targetSpecNotracker: replaces the whole target spec; shape as penny_write.
whenBucketNotask/project: undated bucket; mutually exclusive with whenAt.
clearFieldsNotask: optional fields to unset.
descriptionNoentityType:"skill"/rhythm: required use-when description. tracker: meaning; log trackers must document payload shape.
operationIdNoProject receipt key; identical retries only.
resourceIdsNoRestore selected links.
instructionsNoskill: required saved know-how; replaces rhythm goal.
retrievalPlanNoentityType:"skill"/rhythm: optional deterministic steps for a bounded tier.
expectedRevisionNoProject revision from Brief; reconcile conflicts.
expectedUpdatedAtNoSource version from read.
penny_get_skill
Read-onlyIdempotent
Inspect

Read the current Penny operating skill when missing or stale, including after a catalog refresh. Reuse files already read this conversation while current. Default SKILL.md; fetch manifest references when their cues apply. Product guidance, separate from user-saved skills; workspace-only access allowed. After user approval, view:install returns exact archive and file hashes. Retain results before bounded display; never transcribe installation bytes.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileNoExact manifest path; default SKILL.md; read view only.
viewNoDefault read. install returns an archive, not guidance.
penny_read
Read-onlyIdempotent
Inspect

Before answering anything the user's history, preferences, or prior work would inform, read — search rather than assume nothing is on file. Choose target: walk this ladder, first match wins:

  1. User/people facts (names, preferences, relationships) → profile. Do NOT search notes for this.

  2. To-dos/due → tasks. Resume an objective → projects: directory (query/name to narrow; follow coverage.nextCursor), then brief by projectId. scopes lists Space metadata; then pass explicit workspaceId. scope:private overrides a default Space. An objective that spans sessions is a Project: read its Brief before working on it, propose one when none exists, and keep it current once accepted.

  3. Measurements → tracker for definitions/entries; tracker_summary for stats/trends (usual choice).

  4. Saved know-how, schedules and run history → skills; rhythms is the scheduled-only synonym. Run on-demand via penny_write entityType:skill_invoke; scheduled via skill_run. Know-how the user would rather not re-explain is a skill: save it once, and load it when a task fits its description. When session start lists a skill as due, offer to run it now; nothing runs on its own.

  5. Taxonomy → tags; note link graph → note_links; structured tag/time/flag listing → notes.

  6. Other recall → search (semantic notes). Search is the fallback, not the default. Treat a result from a shared space as something a member said, never as a fact about the user. Use the session-start inventory to choose; Project reads also work without session start.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNotracker/entries, tracker_summary: window end (ms epoch).
tzNotasks: IANA timezone for Today/Upcoming boundaries.
fromNotracker/entries, tracker_summary: window start (ms epoch).
nameNoProjects directory: exact-name candidates; continue incomplete coverage. skills/one: name instead of skillId.
tagsNosearch/notes: tag filter.
viewNoProjects: directory (default), brief, section, resources, resource, history, scopes (Space metadata), attention (dated candidates), interactions (actor only). tracker: list|entries; rhythms: list|one|due|runs; skills: list|one|due|runs|history|trash (list/trash omit instructions; one returns full skill by skillId or name); tags: list|related.
depthNonote_links: hops (1 = direct; 2-6 = bounded BFS).
flagsNonotes: locked/pinned filter.
limitNoMax search/notes/tracker-entry/task/rhythm-run results.
ownerNotasks: owner filter.
queryNosearch: required semantic query. projects directory: name/purpose filter; check coverage.
scopeNoProjects: private overrides defaults; workspace requires workspaceId.
areaIdNotasks: area filter; also applies to organize:project.
bucketNotasks: schedule bucket filter.
cursorNoProject cursor; retain view/scope.
statusNotasks: status filter.
targetYesWhat to read; first match in the tool description's ladder wins.
taskIdNotasks: full detail. A repeating task returns seriesId/currentOccurrenceId; act on the current occurrence, not a completed ID.
blockedNotasks: only tasks with unmet dependsOn.
sectionNoprojects/section: one Brief section.
seedIdsNonote_links: required starting note IDs.
skillIdNoskills: required for one unless name is given; optional run scope for runs.
dateAxisNonotes: timeRange axis; created = when written, valid = when the fact holds.
dueRangeNotasks: due-date window (ms epoch).
eventKeyNoProjects interactions: actor event key; omit to page.
maxDepthNotags/related: maximum traversal depth.
maxNodesNonote_links: node cap for depth > 1; default 50.
organizeNotasks: list containers instead of tasks.
rhythmIdNorhythms: required for one; optional run scope for runs.
seriesIdNotasks: complete recurring-series history, newest first, including completed occurrences.
edgeTypesNonote_links: only follow/return these relationship types.
minWeightNotags/related: minimum edge weight (default 0.4).
orgStatusNotasks organize:project: Project status filter.
projectIdNoprojects brief/section/resources/resource/history: required stable Project ID. tasks: Project filter or heading parent.
timeRangeNosearch/notes: time window (ms epoch).
trackerIdNoRequired for tracker/entries and tracker_summary.
blockNamesNoprofile: exact block names.
confidenceNonotes: confidence range.
ifRevisionNoprofile: last-read revision; returns {unchanged:true} if unchanged.
projectKeyNoprofile: include subconscious:<projectKey>.
resourceIdNoProjects resource: read the authorized current source.
enabledOnlyNorhythms/list: only enabled rhythms.
resourceStateNo
graphTraversalNosearch: opt into tag/link graph expansion (default false; measured recall loss). Use only for deliberate graph exploration.
includeArchivedNoInclude archived trackers, Projects, or task containers.
includeCompletedNotasks: include done/canceled; default false.
includeRelationsNotags/list: include parents/children/synonyms.
penny_session_start
Read-onlyIdempotent
Inspect

Call ONCE at the start of every conversation, before the first substantive reply. First read the installed Penny skill; report its exact metadata via installedSkillStatus/Version/Sha256/Source. Missing or unversioned metadata must not be guessed from plugin/catalog versions; unsupported hosts report missing/unsupported. Retain results in execution storage before bounded display; inspect one text OR structured payload. Check pennySkill.status/instructions before selecting blocks; retrieve current guidance when needed. Reuse the complete, untruncated profile (persona/facts/preferences/custom blocks) and answer from it before searching notes. Follow self_improvement throughout the conversation. meta.onboarding present: offer penny_start_setup, resuming from its phase. meta.saveDrought true: follow drought repair. Inventories of trackers, rhythms, tasks and Projects are capped; meta.truncated.* means drill down with penny_read. skills.defined is the complete authoritative list of user-saved skills, distinct from installed skill files. features says which features are in use and when; consult it and the inventory before choosing entityType. tz is IANA (default UTC) for local Today/Overdue and dueNow. projects is a bounded PRIVATE directory with coverage and dated attention candidates, not a search of all Spaces; read relevant Briefs by projectId. Workspace-only connections cannot call this: use penny_read target:projects view:scopes, then explicit workspaceId. projectKey includes only the matching repository subconscious block, not a Penny Project.

ParametersJSON Schema
NameRequiredDescriptionDefault
tzNoIANA timezone for today/overdue boundaries (e.g. America/New_York); default UTC.
projectKeyNoInclude subconscious:<projectKey>; exclude all other subconscious blocks.
installedSkillSha256NoExact metadata.bundle_sha256; report absent metadata as unversioned.
installedSkillSourceNoManage plugin copies via plugin manager; standalone via approved archive installation.
installedSkillStatusNoRead installed skill, then report. Legacy omission returns not_reported.
installedSkillVersionNoExact installed metadata.version; omit if missing or unversioned.
penny_start_setup
Idempotent
Inspect

Setup in phases; omit phase to start, resume from meta.onboarding.phase. skipForGood opts out. Stage encrypted imports for dashboard review; status checks receipts. Only users save/cancel there. Imported counts are server-derived; finish cannot complete an active import.

ParametersJSON Schema
NameRequiredDescriptionDefault
stopNoTour stop, with phase tour.
phaseNoPhase to run; omit to start.
clientNoActual host: claude-desktop, claude-code, codex, chatgpt or other; tailors paste guidance.
countsNoCumulative answers/featuresCreated. Ledger imports ignore imported; only committed receipts count.
draftIdNoReturned collection ID; stage only.
importDraftNoStrict JSON {notes,profiles}; returned schema. 10 notes, 4 replacements, 64 KiB UTF-8. No approval/source/selection.
skipForGoodNoUser requested permanent setup opt-out.
importActionNoStage needs importDraft, draftId, expectedRevision. Status has no content. No model approval.
prevAcceptedNoDid the user accept the previous tour stop's offer?
expectedRevisionNoReturned revision; stage only.
penny_writeInspect

Save the moment something durable emerges — a decision, preference, plan, correction, a to-do, a measurement, or something you produced — mid-conversation and unprompted; when the call is close, save. Choose entityType: walk this ladder, first match wins:

  1. Durable fact about the user or their people → update the profile (profile upsert or penny_edit), not a note. How they want to be remembered → memory_policy, a general rule in their words; how they want you to show up (tone/register/manner) → persona. 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.

  2. Commitment/action with a done-state → task. Organize via area/project/heading. A to-do the user mentions, even in passing, is a task: offer to capture it, then write it. Project create: patch.name/purpose + operationId; revise: projectId + expectedRevision from Brief + sparse patch (max 25 step/resource changes). project_interaction records actor proposals/declines/deferrals. pending_share_approval is a proposal, not a save. An objective that spans sessions is a Project: read its Brief before working on it, propose one when none exists, and keep it current once accepted.

  3. Measurement → tracker_entry for an existing tracker (check inventory); otherwise propose tracker first. Active duplicate tracker names are rejected; edit with penny_edit. A measurement the user would log more than once is a tracker entry; if no tracker fits, propose one before logging.

  4. Reusable know-how → skill; trigger makes it scheduled (legacy rhythm). Existing skill names prepare a preview; wait for user approval before penny_edit op:apply with proposalId. Run on-demand via skill_invoke; begin scheduled runs via skill_run. Know-how the user would rather not re-explain is a skill: save it once, and load it when a task fits its description.

  5. Other context/events/ideas/learning → note. Prefer a specific type when unsure; a note is the fallback, not the default. Also tag_relation and tracker_note_link. Batch notes or tracker_entry entries: max100. Modify existing items with penny_edit; trash with penny_delete. Reuse an existing tag before minting a new one. Tagging and linking conventions live in the Penny skill.

Note confidence measures signal, not pipeline: 0.95 = explicit user statement; 0.80 = confirmed decision; 0.60 = reasonable inference; 0.40 = hedged or sleeptime-derived; 0.20 = weak signal. Each note needs sampleQuestions: exactly three short, distinct natural-language questions derived from its content, in the user's voice, not keywords or near-duplicates. For an APA preference: ["What citation style should I use for the paper?", "How should I format references in my thesis?", "What’s my usual academic style?"].

ParametersJSON Schema
NameRequiredDescriptionDefault
goalNorhythm: required run instructions; skill uses instructions instead.
kindNotracker: required; habit|metric|goal|log|status|custom.
nameNoRequired: tracker/area/project/rhythm and entityType:"skill". skill_invoke/skill_run: alternative to skillId. Existing skill names preview changes; new names create. Active tracker duplicates are rejected; archived names reactivate.
tagsNotask: tags to attach.
unitNotracker: unit of measure.
actorNotask/area/project/heading: actor (me|agent) recorded in activity ledger.
childNotag_relation: required child tag.
notesNonote: array (max 100), each requires content and confidence (0–1), plus tags and exactly 3 sampleQuestions in the user’s voice; optional source/memoryType (episodic|semantic|procedural)/validFrom. task/area/project: markdown string.
orderNotask/area/project/heading: sort order.
ownerNotask: assignee.
patchNoProject: sparse changes; omitted fields stay. Max 25 step/resource changes.
scopeNoProfile: global|workspace. Projects: private; workspace requires workspaceId.
titleNotask/heading: required title/label.
areaIdNoproject: required parent area.
parentNotag_relation: required parent tag of child_of edge.
sourceNonote/tracker_entry: provenance; defaults conversation/agent-mcp respectively.
statusNotask: initial status.
whenAtNotask/project: schedule date (ms epoch).
contentNoprofile: required block content.
deliverNoentityType:"skill": required with trigger; rhythm: required. Omit for on-demand. Scheduled output: {kind:'note',tags?:string[]}|{kind:'profile_block',blockName:string}|{kind:'notify'}.
entriesNotracker_entry: up to 100 for one trackerId; each {payload,loggedAt?,agentNote?,noteIds?,source?,metadata?,externalId?}. Mutually exclusive with top-level payload. Receipts list saved/failed items and duplicates for stored externalIds; do not claim all saved from a partial result.
noteIdsNotracker_entry: archival note IDs to attach. tracker_note_link: required note IDs to link.
payloadNotracker_entry: tracker-defined data point; required unless entries is used.
postureNoentityType:"skill" with trigger, or rhythm: read|propose|act; default read.
skillIdNoskill_invoke/skill_run: skill to run now/begin; required unless name is given.
triggerNoentityType:"skill": optional; rhythm: required. Requires deliver. Penny does not run it; due signals reach the connected agent. Schedule: {kind:"schedule",cadence:"daily"|"weekly"|"monthly",at?:"Fri 16:00",timezone?:"America/Denver"}. ALWAYS set IANA timezone; default UTC shifts local times. Event: {kind:"event",on:"note.created",where?:{tags?:string[]}}.
deadlineNotask/project: hard due date (ms epoch).
rhythmIdNorhythm_run: rhythm to begin; or pass name.
agentNoteNotracker_entry, single only: short non-searchable caption.
blockNameNoprofile: required block name to upsert.
dependsOnNotask: full prerequisite taskId set; replaces all.
headingIdNotask: parent heading.
linkNotesNotask: note IDs to link.
projectIdNotask: parent Project. heading: required parent Project.
reasoningNotag_relation: short edge justification, typically a user quote.
trackerIdNotracker_entry: required tracker to log against.
entityTypeYesWhat to create; first match in the tool description's ladder wins.
externalIdNotracker_entry, also entries items: source record ID, max 200 chars. Use for imports/sync: repeats on the same tracker return the existing entry as duplicate. Opaque, unencrypted: never include content.
recordedAtNotracker_entry, single only: observation time (ms epoch); default now.
recurrenceNotask: repeat. Returned taskId is the first occurrence; completion returns nextTaskId (see penny_edit status). Never reuse a completed occurrence's ID.
targetSpecNotracker: JSON target spec, interpreted at retrieval (e.g. {kind:'daily_minimum',value:10000}).
whenBucketNotask/project: undated bucket; mutually exclusive with whenAt.
descriptionNotracker: required meaning. entityType:"skill"/rhythm: required one-line purpose, including on-demand skills.
interactionNoproject_interaction: actor decision; read first, update with expectedUpdatedAt.
operationIdNoProject receipt key; identical retries only.
instructionsNoskill: required know-how for invocation or when a connected agent picks up a due skill. Replaces rhythm goal.
retrievalPlanNoentityType:"skill"/rhythm: optional deterministic steps [{tool,args}] for a bounded tier.
trackerEntryIdNotracker_note_link: required entry to attach notes to.
expectedRevisionNoProject revision from Brief; reconcile conflicts.
expectedUpdatedAtNoSource version from read.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 7 tool updates
    • Changedpenny_delete5 fields changed
      • changedInput schema / properties / ids / description
        Previous value: -"entityType:\"note\"/\"tracker_entry\" — ids to trash (max 100); \"rhythm\"/\"skill\" — exactly one id; \"profile_block\" — block names to trash."New value: +"note/tracker_entry: IDs to trash, max 100. rhythm/skill: exactly one ID. profile_block: block names to trash."
      • changedInput schema / properties / noteIds / description
        Previous value: -"entityType:\"tracker_note_link\" (required) — the notes to unlink."New value: +"tracker_note_link: required note IDs to unlink."
      • changedInput schema / properties / tagA / description
        Previous value: -"entityType:\"tag_relation\" (required) — one endpoint of the edge to remove."New value: +"tag_relation: required edge endpoint to remove."
      • changedInput schema / properties / tagB / description
        Previous value: -"entityType:\"tag_relation\" (required) — the other endpoint."New value: +"tag_relation: required other endpoint."
      • changedInput schema / properties / trackerEntryId / description
        Previous value: -"entityType:\"tracker_note_link\" (required) — the entry to detach notes from."New value: +"tracker_note_link: required entry to detach notes from."
    • Changedpenny_edit42 fields changed
      • changedInput schema / properties / actor / description
        Previous value: -"entityType:\"task\"/\"area\"/\"project\"/\"heading\" — who took the action (me|agent), written to the activity ledger."New value: +"task/area/project/heading: actor (me|agent) recorded in activity ledger."
      • changedInput schema / properties / areaId / description
        Previous value: -"entityType:\"project\" — the area the project belongs to."New value: +"project: parent area."
      • changedInput schema / properties / blockName / description
        Previous value: -"entityType:\"profile\" (required) — the profile block to upsert."New value: +"profile: required block to upsert."
      • changedInput schema / properties / clearFields / description
        Previous value: -"entityType:\"task\" — names of optional fields to UNSET on the task."New value: +"task: optional fields to unset."
      • changedInput schema / properties / content / description
        Previous value: -"entityType:\"profile\" (required) — the new block content."New value: +"profile: required new block content."
      • changedInput schema / properties / deadline / description
        Previous value: -"entityType:\"task\"/\"project\" — hard due date (ms epoch)."New value: +"task/project: hard due date (ms epoch)."
      • changedInput schema / properties / deliver / description
        Previous value: -"entityType:\"skill\": required with trigger (also rhythm); omit for on-demand. See penny_write for shape."New value: +"entityType:\"skill\": required with trigger; rhythm: required. Omit for on-demand. Shape: penny_write."
      • changedInput schema / properties / dependsOn / description
        Previous value: -"entityType:\"task\" — full replacement set of taskIds that must complete first."New value: +"task: full prerequisite taskId set; replaces all."
      • changedInput schema / properties / description / description
        Previous value: -"entityType:\"skill\": REQUIRED use-when description; also rhythm. tracker: meaning; log trackers must document payload shape."New value: +"entityType:\"skill\"/rhythm: required use-when description. tracker: meaning; log trackers must document payload shape."
      • changedInput schema / properties / enabled / description
        Previous value: -"entityType:\"skill\": false pauses due signals, true resumes; requires skillId. Penny does not run skills."New value: +"skill: false pauses due signals, true resumes; requires skillId. Penny does not run skills."
      • changedInput schema / properties / expectedRevision / description
        Previous value: -"Project edit revision from Brief; reconcile conflicts."New value: +"Project revision from Brief; reconcile conflicts."
      • changedInput schema / properties / expectedUpdatedAt / description
        Previous value: -"Source version from the read."New value: +"Source version from read."
      • changedInput schema / properties / goal / description
        Previous value: -"entityType:\"rhythm\" (required) — what the run should do. On entityType:\"skill\" this is `instructions`."New value: +"rhythm: required run instructions; skill uses instructions instead."
      • changedInput schema / properties / historyId / description
        Previous value: -"restore_revision: Project history item or skill history item. Skill restoration prepares a preview; requires skillId and expectedUpdatedAt."New value: +"restore_revision: Project/skill history ID. Skill restore previews; requires skillId and expectedUpdatedAt."
      • changedInput schema / properties / ids / description
        Previous value: -"op:\"restore\" — ids to un-trash (max 100)."New value: +"restore: IDs to un-trash; max 100."
      • changedInput schema / properties / instructions / description
        Previous value: -"entityType:\"skill\" (required) — the saved know-how (generalizes the rhythm \"goal\")."New value: +"skill: required saved know-how; replaces rhythm goal."
      • changedInput schema / properties / kind / description
        Previous value: -"entityType:\"tracker\" — habit | metric | goal | log | status | custom."New value: +"tracker: habit|metric|goal|log|status|custom."
      • changedInput schema / properties / linkNotes / description
        Previous value: -"entityType:\"task\" — note ids to link to this task."New value: +"task: note IDs to link."
      • changedInput schema / properties / name / description
        Previous value: -"Area/project/tracker name; entityType:\"skill\" names prepare a preview of the replacement (rhythm names upsert)."New value: +"area/project/tracker: name. entityType:\"skill\": previews replacement; rhythm: upserts."
      • changedInput schema / properties / notes / description
        Previous value: -"entityType:\"task\"/\"area\"/\"project\" — markdown body."New value: +"task/area/project: markdown body."
      • changedInput schema / properties / op / description
        Previous value: -"op:\"restore\" un-trashes notes or tracker entries by `ids`."New value: +"restore: un-trash notes/tracker entries by ids."
      • changedInput schema / properties / order / description
        Previous value: -"entityType:\"task\"/\"area\"/\"project\"/\"heading\" — sort order."New value: +"task/area/project/heading: sort order."
      • changedInput schema / properties / orgId / description
        Previous value: -"entityType:\"area\"/\"project\"/\"heading\" (required) — the container to update."New value: +"area/project/heading: required container ID to update."
      • changedInput schema / properties / owner / description
        Previous value: -"entityType:\"task\" — assignee."New value: +"task: assignee."
      • changedInput schema / properties / posture / description
        Previous value: -"entityType:\"skill\" with a `trigger` set (or legacy \"rhythm\") — read | propose | act."New value: +"entityType:\"skill\" with trigger, or rhythm: read|propose|act."
      • changedInput schema / properties / projectId / description
        Previous value: -"entityType:\"heading\" (required) — the project the heading belongs to."New value: +"heading: required parent Project."
      • changedInput schema / properties / proposalId / description
        Previous value: -"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."New value: +"Returned skill proposal. apply commits after user review; cancel discards; undo restores the previous version only if no later edit exists."
      • changedInput schema / properties / provenance / description
        Previous value: -"entityType:\"rhythm_run\" — accountability summary of what the run did (ids/labels, never full content)."New value: +"rhythm_run: accountability summary (IDs/labels, never full content)."
      • changedInput schema / properties / retrievalPlan / description
        Previous value: -"entityType:\"skill\" (or legacy \"rhythm\") — OPTIONAL deterministic steps for a bounded tier."New value: +"entityType:\"skill\"/rhythm: optional deterministic steps for a bounded tier."
      • changedInput schema / properties / runId / description
        Previous value: -"entityType:\"skill_run\" (required) — the run to complete; same field on the legacy \"rhythm_run\"."New value: +"skill_run/rhythm_run: required run ID to complete."
      • changedInput schema / properties / skillId / description
        Previous value: -"entityType:\"skill\" pause/resume — the skill id (required with enabled)."New value: +"skill: ID required with enabled to pause/resume."
      • changedInput schema / properties / snapshot / description
        Previous value: -"Skill restore_revision: which side of the history entry to restore (default before). Select after to recover a change that was undone."New value: +"skill restore_revision: history side; default before. after recovers an undone change."
      • changedInput schema / properties / taskId / description
        Previous value: -"entityType:\"task\" (required) — the task to update."New value: +"task: required ID to update."
      • changedInput schema / properties / title / description
        Previous value: -"entityType:\"task\"/\"heading\" — the title/label."New value: +"task/heading: title/label."
      • changedInput schema / properties / trackerId / description
        Previous value: -"entityType:\"tracker\" (required) — the tracker to update. Only the fields you pass are patched — omit any you don't want to change."New value: +"tracker: required ID to update; only supplied fields change."
      • changedInput schema / properties / trigger / description
        Previous value: -"entityType:\"skill\": optional (required for rhythm). Omit to return to on-demand. Penny does not run it; the connected agent receives due signals. See penny_write for shape; ALWAYS set IANA timezone, default UTC."New value: +"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."
      • changedInput schema / properties / unit / description
        Previous value: -"entityType:\"tracker\" — unit of measure."New value: +"tracker: unit of measure."
      • changedInput schema / properties / updates / description
        Previous value: -"entityType:\"note\" — patch or supersede existing notes (up to 100)."New value: +"note: patch or supersede up to 100 existing notes."
      • changedInput schema / properties / updates / items / properties / content / description
        Previous value: -"Required when mode is \"patch\"."New value: +"Required for patch."
      • changedInput schema / properties / updates / items / properties / supersededBy / description
        Previous value: -"Required when mode is \"replace\" — the id of the note that replaces this one."New value: +"replace: required replacement note ID."
      • changedInput schema / properties / whenAt / description
        Previous value: -"entityType:\"task\"/\"project\" — schedule date (ms epoch)."New value: +"task/project: schedule date (ms epoch)."
      • changedInput schema / properties / whenBucket / description
        Previous value: -"entityType:\"task\"/\"project\" — undated bucket; mutually exclusive with whenAt."New value: +"task/project: undated bucket; mutually exclusive with whenAt."
    • Changedpenny_get_skill2 fields changed
      • changedInput schema / properties / file / description
        Previous value: -"Exact manifest path, default SKILL.md; read view only."New value: +"Exact manifest path; default SKILL.md; read view only."
      • changedInput schema / properties / view / description
        Previous value: -"Default read. Install returns an archive, not readable guidance."New value: +"Default read. install returns an archive, not guidance."
    • Changedpenny_read31 fields changed
      • changedInput schema / properties / areaId / description
        Previous value: -"target:\"tasks\" — filter by area, or organize=\"project\" filter."New value: +"tasks: area filter; also applies to organize:project."
      • changedInput schema / properties / blocked / description
        Previous value: -"target:\"tasks\" — restrict to tasks with unmet dependsOn."New value: +"tasks: only tasks with unmet dependsOn."
      • changedInput schema / properties / bucket / description
        Previous value: -"target:\"tasks\" — filter by schedule bucket."New value: +"tasks: schedule bucket filter."
      • changedInput schema / properties / dateAxis / description
        Previous value: -"target:\"notes\" — which date timeRange filters ('created' = when written, 'valid' = when the fact holds)."New value: +"notes: timeRange axis; created = when written, valid = when the fact holds."
      • changedInput schema / properties / depth / description
        Previous value: -"target:\"note_links\" — hops to expand (1 = direct links; 2-6 = bounded BFS)."New value: +"note_links: hops (1 = direct; 2-6 = bounded BFS)."
      • changedInput schema / properties / dueRange / description
        Previous value: -"target:\"tasks\" — due-date window (ms epoch)."New value: +"tasks: due-date window (ms epoch)."
      • changedInput schema / properties / edgeTypes / description
        Previous value: -"target:\"note_links\" — only follow/return edges of these relationship types."New value: +"note_links: only follow/return these relationship types."
      • changedInput schema / properties / enabledOnly / description
        Previous value: -"target:\"rhythms\" view:\"list\" — only enabled rhythms."New value: +"rhythms/list: only enabled rhythms."
      • changedInput schema / properties / from / description
        Previous value: -"target:\"tracker\" entries / tracker_summary — start of window (ms epoch)."New value: +"tracker/entries, tracker_summary: window start (ms epoch)."
      • changedInput schema / properties / ifRevision / description
        Previous value: -"profile: the revision from your last read; returns {unchanged:true} if nothing changed."New value: +"profile: last-read revision; returns {unchanged:true} if unchanged."
      • changedInput schema / properties / includeCompleted / description
        Previous value: -"target:\"tasks\" — include done/canceled tasks (default false)."New value: +"tasks: include done/canceled; default false."
      • changedInput schema / properties / limit / description
        Previous value: -"Max results. Applies to search, notes, tracker entries, tasks, and rhythm runs."New value: +"Max search/notes/tracker-entry/task/rhythm-run results."
      • changedInput schema / properties / maxNodes / description
        Previous value: -"target:\"note_links\" — cap on returned nodes when depth > 1 (default 50)."New value: +"note_links: node cap for depth > 1; default 50."
      • changedInput schema / properties / name / description
        Previous value: -"Projects directory: exact-name candidates; continue incomplete coverage. target:\"skills\" view:\"one\": the skill's name, in place of skillId."New value: +"Projects directory: exact-name candidates; continue incomplete coverage. skills/one: name instead of skillId."
      • changedInput schema / properties / orgStatus / description
        Previous value: -"target:\"tasks\" organize=\"project\" — filter projects by status."New value: +"tasks organize:project: Project status filter."
      • changedInput schema / properties / organize / description
        Previous value: -"target:\"tasks\" — enumerate containers instead of tasks."New value: +"tasks: list containers instead of tasks."
      • changedInput schema / properties / owner / description
        Previous value: -"target:\"tasks\" — filter by owner."New value: +"tasks: owner filter."
      • changedInput schema / properties / projectId / description
        Previous value: -"target:projects brief/section/resources/resource/history — required stable Project ID. target:tasks — Project filter, or heading parent."New value: +"projects brief/section/resources/resource/history: required stable Project ID. tasks: Project filter or heading parent."
      • changedInput schema / properties / rhythmId / description
        Previous value: -"target:\"rhythms\" view:\"one\" (required) or view:\"runs\" (optional scope)."New value: +"rhythms: required for one; optional run scope for runs."
      • changedInput schema / properties / section / description
        Previous value: -"target:projects view:section — one Brief section."New value: +"projects/section: one Brief section."
      • changedInput schema / properties / seedIds / description
        Previous value: -"target:\"note_links\" — note id(s) to start the link-graph walk from (required)."New value: +"note_links: required starting note IDs."
      • changedInput schema / properties / seriesId / description
        Previous value: -"tasks: one recurring series’ complete occurrence history, newest first (includes completed)."New value: +"tasks: complete recurring-series history, newest first, including completed occurrences."
      • changedInput schema / properties / skillId / description
        Previous value: -"target:\"skills\" view:\"one\" (required unless name is given) or view:\"runs\" (optional scope)."New value: +"skills: required for one unless name is given; optional run scope for runs."
      • changedInput schema / properties / status / description
        Previous value: -"target:\"tasks\" — filter by task status."New value: +"tasks: status filter."
      • changedInput schema / properties / tags / description
        Previous value: -"Filter by tags. Applies to target \"search\" and \"notes\"."New value: +"search/notes: tag filter."
      • changedInput schema / properties / target / description
        Previous value: -"What to read. Walk the ladder in the tool description; first match wins."New value: +"What to read; first match in the tool description's ladder wins."
      • changedInput schema / properties / timeRange / description
        Previous value: -"Time window (ms epoch). Applies to target \"search\" and \"notes\"."New value: +"search/notes: time window (ms epoch)."
      • changedInput schema / properties / to / description
        Previous value: -"target:\"tracker\" entries / tracker_summary — end of window (ms epoch)."New value: +"tracker/entries, tracker_summary: window end (ms epoch)."
      • changedInput schema / properties / trackerId / description
        Previous value: -"target:\"tracker\" view:\"entries\" (required), or target:\"tracker_summary\" (required)."New value: +"Required for tracker/entries and tracker_summary."
      • changedInput schema / properties / tz / description
        Previous value: -"target:\"tasks\" — IANA timezone for Today/Upcoming boundaries."New value: +"tasks: IANA timezone for Today/Upcoming boundaries."
      • changedInput schema / properties / view / description
        Previous value: -"Projects: directory (default), brief, section, resources, resource, history, scopes (Space metadata), attention (dated candidates), interactions (actor only). Secondary selector: target:\"tracker\" list|entries; target:\"rhythms\" list|one|due|runs; target:\"skills\" list|one|due|runs|history|trash (list/trash omit instructions; one: full skill by skillId or name); target:\"tags\" list|related."New value: +"Projects: directory (default), brief, section, resources, resource, history, scopes (Space metadata), attention (dated candidates), interactions (actor only). tracker: list|entries; rhythms: list|one|due|runs; skills: list|one|due|runs|history|trash (list/trash omit instructions; one returns full skill by skillId or name); tags: list|related."
    • Changedpenny_session_start5 fields changed
      • changedInput schema / properties / installedSkillSource / description
        Previous value: -"Management: plugin manager for plugin copies; approved archive installation for standalone copies."New value: +"Manage plugin copies via plugin manager; standalone via approved archive installation."
      • changedInput schema / properties / installedSkillStatus / description
        Previous value: -"Report after reading the installed skill. Legacy omission returns not_reported."New value: +"Read installed skill, then report. Legacy omission returns not_reported."
      • changedInput schema / properties / installedSkillVersion / description
        Previous value: -"Exact metadata.version from the installed skill; omit if missing or unversioned."New value: +"Exact installed metadata.version; omit if missing or unversioned."
      • changedInput schema / properties / projectKey / description
        Previous value: -"Includes only the matching subconscious:<projectKey> block; other subconscious blocks are always excluded."New value: +"Include subconscious:<projectKey>; exclude all other subconscious blocks."
      • changedInput schema / properties / tz / description
        Previous value: -"IANA timezone for deriving today/overdue date boundaries (e.g. America/New_York). Defaults to UTC when omitted."New value: +"IANA timezone for today/overdue boundaries (e.g. America/New_York); default UTC."
    • Changedpenny_start_setup4 fields changed
      • changedInput schema / properties / client / description
        Previous value: -"Actual host: claude-desktop, claude-code, codex, chatgpt or other. Also tailors paste guidance."New value: +"Actual host: claude-desktop, claude-code, codex, chatgpt or other; tailors paste guidance."
      • changedInput schema / properties / counts / description
        Previous value: -"Cumulative answers/featuresCreated. imported is ignored for ledger imports; only committed receipts count."New value: +"Cumulative answers/featuresCreated. Ledger imports ignore imported; only committed receipts count."
      • changedInput schema / properties / prevAccepted / description
        Previous value: -"Whether the user took the previous tour stop's offer."New value: +"Did the user accept the previous tour stop's offer?"
      • changedInput schema / properties / skipForGood / description
        Previous value: -"The user said to skip setup for good."New value: +"User requested permanent setup opt-out."
    • Changedpenny_write48 fields changed
      • changedInput schema / properties / actor / description
        Previous value: -"entityType:\"task\"/\"area\"/\"project\"/\"heading\" — who took the action (me|agent), written to the activity ledger."New value: +"task/area/project/heading: actor (me|agent) recorded in activity ledger."
      • changedInput schema / properties / agentNote / description
        Previous value: -"entityType:\"tracker_entry\" (single-entry form only) — short caption on this one data point (not searchable)."New value: +"tracker_entry, single only: short non-searchable caption."
      • changedInput schema / properties / areaId / description
        Previous value: -"entityType:\"project\" (required) — the area the project belongs to."New value: +"project: required parent area."
      • changedInput schema / properties / blockName / description
        Previous value: -"entityType:\"profile\" (required) — the profile block name to upsert."New value: +"profile: required block name to upsert."
      • changedInput schema / properties / child / description
        Previous value: -"entityType:\"tag_relation\" (required) — the child tag."New value: +"tag_relation: required child tag."
      • changedInput schema / properties / content / description
        Previous value: -"entityType:\"profile\" (required) — the block content."New value: +"profile: required block content."
      • changedInput schema / properties / deadline / description
        Previous value: -"entityType:\"task\"/\"project\" — hard due date (ms epoch)."New value: +"task/project: hard due date (ms epoch)."
      • changedInput schema / properties / deliver / description
        Previous value: -"entityType:\"skill\" — REQUIRED once `trigger` is set (and on the legacy entityType:\"rhythm\"); omit on an on-demand skill. Where a scheduled run's output lands: { kind:'note', tags?:string[] } | { kind:'profile_block', blockName:string } | { kind:'notify' }."New value: +"entityType:\"skill\": required with trigger; rhythm: required. Omit for on-demand. Scheduled output: {kind:'note',tags?:string[]}|{kind:'profile_block',blockName:string}|{kind:'notify'}."
      • changedInput schema / properties / dependsOn / description
        Previous value: -"entityType:\"task\" — full replacement set of taskIds that must complete first."New value: +"task: full prerequisite taskId set; replaces all."
      • changedInput schema / properties / description / description
        Previous value: -"entityType:\"tracker\" (required) — natural-language meaning. entityType:\"skill\" (required — every skill, on-demand or scheduled) or legacy \"rhythm\" — one-line description of what it is for."New value: +"tracker: required meaning. entityType:\"skill\"/rhythm: required one-line purpose, including on-demand skills."
      • changedInput schema / properties / entityType / description
        Previous value: -"What to create. Walk the ladder in the tool description; first match wins."New value: +"What to create; first match in the tool description's ladder wins."
      • changedInput schema / properties / entries / description
        Previous value: -"tracker_entry: batch up to 100 entries for one trackerId; each {payload,loggedAt?,agentNote?,noteIds?,source?,metadata?}. Mutually exclusive with top-level payload. Receipts report each saved/failed item; do not claim all saved from a partial result."New value: +"tracker_entry: up to 100 for one trackerId; each {payload,loggedAt?,agentNote?,noteIds?,source?,metadata?,externalId?}. Mutually exclusive with top-level payload. Receipts list saved/failed items and duplicates for stored externalIds; do not claim all saved from a partial result."
      • changedInput schema / properties / expectedRevision / description
        Previous value: -"Project edit revision from Brief; reconcile conflicts."New value: +"Project revision from Brief; reconcile conflicts."
      • changedInput schema / properties / expectedUpdatedAt / description
        Previous value: -"Source version from the read."New value: +"Source version from read."
      • addedInput schema / properties / externalId
        Added value: +{
        +  "description": "tracker_entry, also entries items: source record ID, max 200 chars. Use for imports/sync: repeats on the same tracker return the existing entry as duplicate. Opaque, unencrypted: never include content.",
        +  "type": "string"
        +}
      • changedInput schema / properties / goal / description
        Previous value: -"entityType:\"rhythm\" (required) — natural-language instruction: what the run should do. On entityType:\"skill\" this is `instructions`."New value: +"rhythm: required run instructions; skill uses instructions instead."
      • changedInput schema / properties / headingId / description
        Previous value: -"entityType:\"task\" — heading to file the task under."New value: +"task: parent heading."
      • changedInput schema / properties / instructions / description
        Previous value: -"entityType:\"skill\" (required) — the saved know-how: what to do when the skill is invoked, or when a connected agent picks it up after it comes due. Generalizes the rhythm \"goal\"."New value: +"skill: required know-how for invocation or when a connected agent picks up a due skill. Replaces rhythm goal."
      • changedInput schema / properties / kind / description
        Previous value: -"entityType:\"tracker\" (required) — habit | metric | goal | log | status | custom."New value: +"tracker: required; habit|metric|goal|log|status|custom."
      • changedInput schema / properties / linkNotes / description
        Previous value: -"entityType:\"task\" — note ids to link to this task."New value: +"task: note IDs to link."
      • changedInput schema / properties / name / description
        Previous value: -"Required for tracker/area/project and entityType:\"skill\" (also rhythm); for skill_invoke/skill_run, an alternative to skillId. Existing skill names prepare a change preview; new names create. Active tracker duplicates are rejected; archived names reactivate."New value: +"Required: tracker/area/project/rhythm and entityType:\"skill\". skill_invoke/skill_run: alternative to skillId. Existing skill names preview changes; new names create. Active tracker duplicates are rejected; archived names reactivate."
      • changedInput schema / properties / noteIds / description
        Previous value: -"entityType:\"tracker_entry\" — archival note ids to attach; or \"tracker_note_link\" (required) — the notes to link."New value: +"tracker_entry: archival note IDs to attach. tracker_note_link: required note IDs to link."
      • changedInput schema / properties / order / description
        Previous value: -"entityType:\"task\"/\"area\"/\"project\"/\"heading\" — sort order."New value: +"task/area/project/heading: sort order."
      • changedInput schema / properties / owner / description
        Previous value: -"entityType:\"task\" — assignee."New value: +"task: assignee."
      • changedInput schema / properties / parent / description
        Previous value: -"entityType:\"tag_relation\" (required) — the parent tag in the child_of edge."New value: +"tag_relation: required parent tag of child_of edge."
      • changedInput schema / properties / patch / description
        Previous value: -"Project sparse changes; omitted fields stay. Max 25 step/resource changes."New value: +"Project: sparse changes; omitted fields stay. Max 25 step/resource changes."
      • changedInput schema / properties / patch / properties / steps / description
        Previous value: -"accept converts a saved suggestion into a To-do."New value: +"accept turns a saved suggestion into a To-do."
      • changedInput schema / properties / payload / description
        Previous value: -"entityType:\"tracker_entry\" (required unless `entries` is used) — the structured data point; shape is tracker-defined."New value: +"tracker_entry: tracker-defined data point; required unless entries is used."
      • changedInput schema / properties / posture / description
        Previous value: -"entityType:\"skill\" with a `trigger` set (or legacy \"rhythm\") — read | propose | act (defaults 'read')."New value: +"entityType:\"skill\" with trigger, or rhythm: read|propose|act; default read."
      • changedInput schema / properties / projectId / description
        Previous value: -"entityType:\"task\" — parent project; or \"heading\" — the project it belongs to (required)."New value: +"task: parent Project. heading: required parent Project."
      • changedInput schema / properties / reasoning / description
        Previous value: -"entityType:\"tag_relation\" — short justification (typically a user quote) for the edge."New value: +"tag_relation: short edge justification, typically a user quote."
      • changedInput schema / properties / recordedAt / description
        Previous value: -"entityType:\"tracker_entry\" (single-entry form only) — observation time (ms epoch; defaults to now)."New value: +"tracker_entry, single only: observation time (ms epoch); default now."
      • changedInput schema / properties / recurrence / description
        Previous value: -"entityType:\"task\" — makes the task repeat. The returned `taskId` is this task's first occurrence; completing it later returns `nextTaskId` for the next one (see penny_edit's `status` field) — don't cache this id past its first completion."New value: +"task: repeat. Returned taskId is the first occurrence; completion returns nextTaskId (see penny_edit status). Never reuse a completed occurrence's ID."
      • changedInput schema / properties / recurrence / properties / at / description
        Previous value: -"Time expression: \"HH:MM\" for daily, \"<Wd> HH:MM\" for weekly, \"DD HH:MM\" for monthly."New value: +"daily: HH:MM; weekly: <Wd> HH:MM; monthly: DD HH:MM."
      • changedInput schema / properties / retrievalPlan / description
        Previous value: -"entityType:\"skill\" (or legacy \"rhythm\") — OPTIONAL deterministic steps [{ tool, args }] for a bounded tier."New value: +"entityType:\"skill\"/rhythm: optional deterministic steps [{tool,args}] for a bounded tier."
      • changedInput schema / properties / rhythmId / description
        Previous value: -"entityType:\"rhythm_run\" — the rhythm to begin a run of (or pass `name`)."New value: +"rhythm_run: rhythm to begin; or pass name."
      • changedInput schema / properties / skillId / description
        Previous value: -"entityType:\"skill_invoke\" (required, or pass `name`) — the skill to run now. entityType:\"skill_run\" — the skill to begin a run of (or pass `name`)."New value: +"skill_invoke/skill_run: skill to run now/begin; required unless name is given."
      • changedInput schema / properties / source / description
        Previous value: -"entityType:\"note\"/\"tracker_entry\" — provenance label (defaults 'conversation' / 'agent-mcp')."New value: +"note/tracker_entry: provenance; defaults conversation/agent-mcp respectively."
      • changedInput schema / properties / status / description
        Previous value: -"entityType:\"task\" — initial status."New value: +"task: initial status."
      • changedInput schema / properties / tags / description
        Previous value: -"entityType:\"task\" — tags to attach."New value: +"task: tags to attach."
      • changedInput schema / properties / targetSpec / description
        Previous value: -"entityType:\"tracker\" — JSON target spec, interpreted at retrieval (e.g. { kind: 'daily_minimum', value: 10000 })."New value: +"tracker: JSON target spec, interpreted at retrieval (e.g. {kind:'daily_minimum',value:10000})."
      • changedInput schema / properties / title / description
        Previous value: -"entityType:\"task\" (required) or \"heading\" (required) — the title/label."New value: +"task/heading: required title/label."
      • changedInput schema / properties / trackerEntryId / description
        Previous value: -"entityType:\"tracker_note_link\" (required) — the logged tracker entry to attach notes to."New value: +"tracker_note_link: required entry to attach notes to."
      • changedInput schema / properties / trackerId / description
        Previous value: -"entityType:\"tracker_entry\" (required) — the tracker to log against."New value: +"tracker_entry: required tracker to log against."
      • changedInput schema / properties / trigger / description
        Previous value: -"entityType:\"skill\": optional schedule (required for rhythm), requires deliver. Penny does not run it: due signals reach the connected agent. Schedule: {kind:\"schedule\",cadence:\"daily\"|\"weekly\"|\"monthly\",at?:\"Fri 16:00\",timezone?:\"America/Denver\"}. ALWAYS set timezone (IANA); default UTC shifts local times. Event: {kind:\"event\",on:\"note.created\",where?:{tags?:string[]}}."New value: +"entityType:\"skill\": optional; rhythm: required. Requires deliver. Penny does not run it; due signals reach the connected agent. Schedule: {kind:\"schedule\",cadence:\"daily\"|\"weekly\"|\"monthly\",at?:\"Fri 16:00\",timezone?:\"America/Denver\"}. ALWAYS set IANA timezone; default UTC shifts local times. Event: {kind:\"event\",on:\"note.created\",where?:{tags?:string[]}}."
      • changedInput schema / properties / unit / description
        Previous value: -"entityType:\"tracker\" — unit of measure."New value: +"tracker: unit of measure."
      • changedInput schema / properties / whenAt / description
        Previous value: -"entityType:\"task\"/\"project\" — schedule date (ms epoch)."New value: +"task/project: schedule date (ms epoch)."
      • changedInput schema / properties / whenBucket / description
        Previous value: -"entityType:\"task\"/\"project\" — undated bucket; mutually exclusive with whenAt."New value: +"task/project: undated bucket; mutually exclusive with whenAt."
  2. 1 tool update
    • Changedpenny_read3 fields changed
      • changedInput schema / properties / name / description
        Previous value: -"Projects directory: exact-name candidates; continue incomplete coverage."New value: +"Projects directory: exact-name candidates; continue incomplete coverage. target:\"skills\" view:\"one\": the skill's name, in place of skillId."
      • changedInput schema / properties / skillId / description
        Previous value: -"target:\"skills\" view:\"one\" (required) or view:\"runs\" (optional scope)."New value: +"target:\"skills\" view:\"one\" (required unless name is given) or view:\"runs\" (optional scope)."
      • changedInput schema / properties / view / description
        Previous value: -"Projects: directory (default), brief, section, resources, resource, history, scopes (Space metadata), attention (dated candidates), interactions (actor only). Secondary selector: target:\"tracker\" list|entries; target:\"rhythms\" list|one|due|runs; target:\"skills\" list|one|due|runs|history|trash (to run one, use penny_write \"skill_invoke\"); target:\"tags\" list|related."New value: +"Projects: directory (default), brief, section, resources, resource, history, scopes (Space metadata), attention (dated candidates), interactions (actor only). Secondary selector: target:\"tracker\" list|entries; target:\"rhythms\" list|one|due|runs; target:\"skills\" list|one|due|runs|history|trash (list/trash omit instructions; one: full skill by skillId or name); target:\"tags\" list|related."
  3. 2 tool updates
    • Changedpenny_edit2 fields changed
      • changedInput schema / properties / enabled / description
        Previous value: -"entityType:\"skill\": false pauses due signals, true resumes; requires skillId. MyPenny does not run skills."New value: +"entityType:\"skill\": false pauses due signals, true resumes; requires skillId. Penny does not run skills."
      • changedInput schema / properties / trigger / description
        Previous value: -"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."New value: +"entityType:\"skill\": optional (required for rhythm). Omit to return to on-demand. Penny does not run it; the connected agent receives due signals. See penny_write for shape; ALWAYS set IANA timezone, default UTC."
    • Changedpenny_write1 field changed
      • changedInput schema / properties / trigger / description
        Previous value: -"entityType:\"skill\": optional schedule (required for rhythm), requires deliver. MyPenny does not run it: due signals reach the connected agent. Schedule: {kind:\"schedule\",cadence:\"daily\"|\"weekly\"|\"monthly\",at?:\"Fri 16:00\",timezone?:\"America/Denver\"}. ALWAYS set timezone (IANA); default UTC shifts local times. Event: {kind:\"event\",on:\"note.created\",where?:{tags?:string[]}}."New value: +"entityType:\"skill\": optional schedule (required for rhythm), requires deliver. Penny does not run it: due signals reach the connected agent. Schedule: {kind:\"schedule\",cadence:\"daily\"|\"weekly\"|\"monthly\",at?:\"Fri 16:00\",timezone?:\"America/Denver\"}. ALWAYS set timezone (IANA); default UTC shifts local times. Event: {kind:\"event\",on:\"note.created\",where?:{tags?:string[]}}."
  4. 3 tool updates
    • Changedpenny_edit1 field changed
      • changedInput schema / properties / recurrence / description
        Previous value: -"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."New value: +"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."
    • Changedpenny_session_start2 fields changed
      • changedInput schema / properties / installedSkillSource / description
        Previous value: -"How the skill is managed; plugin copies update through the plugin manager, standalone copies through approved archive installation."New value: +"Management: plugin manager for plugin copies; approved archive installation for standalone copies."
      • changedInput schema / properties / installedSkillStatus / description
        Previous value: -"Report after reading the installed Penny skill. Omission is retained only for legacy clients and returns not_reported."New value: +"Report after reading the installed skill. Legacy omission returns not_reported."
    • Changedpenny_start_setup10 fields changed
      • changedInput schema / properties / client / description
        Previous value: -"Optional client hint: 'claude-desktop' | 'chatgpt' | 'claude-web' | other. Tailors the snippet's where-to-paste guidance."New value: +"Actual host: claude-desktop, claude-code, codex, chatgpt or other. Also tailors paste guidance."
      • addedInput schema / properties / counts
        Added value: +{
        +  "description": "Cumulative answers/featuresCreated. imported is ignored for ledger imports; only committed receipts count.",
        +  "properties": {
        +    "answers": {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    "featuresCreated": {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    "imported": {
        +      "minimum": 0,
        +      "type": "integer"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / draftId
        Added value: +{
        +  "description": "Returned collection ID; stage only.",
        +  "type": "string"
        +}
      • addedInput schema / properties / expectedRevision
        Added value: +{
        +  "description": "Returned revision; stage only.",
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / importAction
        Added value: +{
        +  "description": "Stage needs importDraft, draftId, expectedRevision. Status has no content. No model approval.",
        +  "enum": [
        +    "stage",
        +    "status"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / importDraft
        Added value: +{
        +  "description": "Strict JSON {notes,profiles}; returned schema. 10 notes, 4 replacements, 64 KiB UTF-8. No approval/source/selection.",
        +  "type": "string"
        +}
      • addedInput schema / properties / phase
        Added value: +{
        +  "description": "Phase to run; omit to start.",
        +  "enum": [
        +    "start",
        +    "import",
        +    "gaps",
        +    "tour",
        +    "finish"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / prevAccepted
        Added value: +{
        +  "description": "Whether the user took the previous tour stop's offer.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / skipForGood
        Added value: +{
        +  "description": "The user said to skip setup for good.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / stop
        Added value: +{
        +  "description": "Tour stop, with phase tour.",
        +  "maximum": 4,
        +  "minimum": 0,
        +  "type": "integer"
        +}
  5. 1 tool update
    • Changedpenny_read1 field changed
      • addedInput schema / properties / ifRevision
        Added value: +{
        +  "description": "profile: the revision from your last read; returns {unchanged:true} if nothing changed.",
        +  "type": "string"
        +}
  6. 7 tool updates
    • First observedpenny_delete
    • First observedpenny_edit
    • First observedpenny_get_skill
    • First observedpenny_read
    • First observedpenny_session_start
    • First observedpenny_start_setup
    • First observedpenny_write

Publisher details

Operator
Helper Labs
Vendor relationship
Not applicable
Trust center
Not available
Restrictions
Free trial with paid plan. OAuth MCP connector.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    B
    maintenance
    Personal RAG database and semantic search built from inside your AI chat. Store knowledge, voice, and skills; Claude and ChatGPT create work that sounds like you.
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables persistent, searchable memory for AI assistants across platforms like Claude, ChatGPT, and Gemini, using semantic search and automatic deduplication.
    16 npm
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A persistent memory layer for AI tools that decouples personal data from AI's unstable memory, enabling you to mention information once and have it remembered forever across all conversations.
    3
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources