Skip to content

PKM Capture

Single-step entrypoint for adding anything to the personal knowledge system.

When to use

  • "Save this for later" / "capture this" / "add to PKM".
  • Pasting a snippet that should not stay in chat history.
  • Recording something said in a meeting that's worth keeping.

What you produce

  • One AnyType Inbox object with classification, capture source, and content.
  • Optionally an Idea, Event, Person, or Project object if classification is high-confidence.
  • One audit-log entry per write.

MCP tools used

  • mcp__anytype__API-list-spaces — optional sanity check; ids come from spaces.json
  • mcp__anytype__API-create-object — create Inbox entry and any upgraded object
  • mcp__anytype__API-update-object — write result_ref back to the Inbox entry after upgrade

Procedure

  1. Capture content. Verbatim from the user input or selection.
  2. Determine data classification — required (SPB-01).
  3. If unclear, ask before writing.
  4. Default for ambiguous private notes: private_sensitive.
  5. Choose target Space (layout; names in spaces.json):
  6. Use the space's anytype_id from spaces.json (the compact id the API expects). Names drift; ids don't.
  7. Default for agent-driven writes: Agent.
  8. Work and Job Hunt: MCP write only after explicit user approval in this chat for that capture.
  9. Private: never read or write via MCP; if the capture clearly belongs there (offer, NDA detail, comp), tell the user to paste it in Anytype manually.
  10. Normalize tags if the user offered any. Read topic-tags.json. Accept only listed tags; if a value is in forbidden or unknown, ask — do not invent. Tags are topical; Space owns tenancy.
  11. Create Inbox object via mcp__anytype__API-create-object:
  12. type_key: inbox
  13. Properties to set (per inbox-entry.schema.json):
    • captured_at (date) — now
    • capture_source (select) — one of: chat, clipboard, email, voice, manual ⚠️ Use capture_source, NOT source — the source key is reserved by AnyType's built-in URL property.
    • content (text) — captured text
    • data_classification (select) — private_sensitive / internal / low_sensitive
    • processed (checkbox) — false
  14. Use the agent-scoped key (never user key, SPB-02/SPB-03).
  15. Confidence-based classification:
  16. If classifier confidence > 0.85 for one of (Task, Person, Event, Idea, Project), create a second object of that type:
    • Task → type_key: task (use pkm-task skill procedure for field population)
    • Indicators: imperative phrasing ("I need to", "follow up with", "send X by"), explicit deadlines, words like "action item", "TODO", "commit to"
    • Set task_source: chat; set due_date if mentioned
    • Person → type_key: person
    • Event → type_key: event
    • Idea → type_key: idea
    • Project → type_key: pkm_project ⚠️ NOT project (that's the built-in type)
  17. Else leave as inbox; user can classify later.
  18. Write result_ref back to Inbox (only if step 6 created a new object):
  19. Call mcp__anytype__API-update-object on the Inbox object.
  20. Set result_ref (objects) to the ID of the newly created object.
  21. Set processed (checkbox) to true.
  22. Audit log: append a row to ~/tool-chest-data/anytype-audit-log.md (SPB-12).
  23. Action: write for the Inbox creation; classify if upgraded.
  24. Mirror to wiki? Only if classification is low_sensitive or internal AND the user opts in. Default: Anytype only. Never dump Work-space content into the git-tracked wiki.

Anti-patterns

  • Don't write to Anytype without a classification.
  • Don't reuse the user-level AnyType key.
  • Don't echo the captured content into a cloud model context if it's private_sensitive.
  • Don't use MCP against Private for any operation.
  • Don't auto-classify with confidence < 0.85 — leave to inbox.
  • Don't use type_key: project — use pkm_project.
  • Don't use property key source on Inbox — use capture_source.
  • Don't use property key source on Task — use task_source.
  • Don't encode tenancy or sensitivity as tags (work, personal, private_sensitive, …).

Compatibility

  • Requires AnyType Local API key (agent-scoped) injected via env var.
  • Requires the anytype MCP server to be configured.
  • Local-only network egress.