Skip to content
Agentmart
Submit a tool

Persome

Local-first personal memory and model server for trusted MCP agents on macOS.

Connector by Intuition-Lab · GitHub account verified by the MCP Registry

IndexedApache-2.0Local (stdio)★ 1,328
Write a review

Chalk Labs

Need help deploying Persome?

Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.

Book a call

Install

Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.

npx agentmarket install connector/intuition-lab-personal-model

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Local-first personal memory and model server for trusted MCP agents on macOS.

Use cases: agent-memory

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list and install config. Checked Oct 25, 2026.

Tools
10 read · 6 write · 0 delete · 6 not yet classified
Secrets
None asked for
Install scripts
Not scanned yet
Runs as
Python package

Tools by what they do 22

Read from the source code; the running server may list different tools.

Read 10 · Look things up without changing anything.

  • get_model_snapshot
  • get_pending_model_work
  • get_schema
  • list_memories
  • query_health_metrics
  • read_memory
  • read_receipt
  • read_recent_capture
  • search
  • search_captures

Write 6 · Create, change, send or run things.

  • behavior_patterns
  • correct_memory
  • entity_graph
  • related_events
  • remember
  • resolve_evidence

Not yet classified 6 · We could not tell from the name and description.

  • attention_trajectory
  • current_context
  • persome_setup_check
  • process_pending_model_work
  • recent_activity
  • verify_fact

Files it touches

  • Any path the agent passes to its tools

Tools (22)

Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • attention_trajectory

    Where the user's attention went, with DWELL (time actually spent). Answers "what did I spend my attention / focus / time on today / this morning / the last N hours". Prefer this over guessing from raw activity whenever the question is about focus or time spent. Built from the timeline's per-block attention locus (the code-resolved focused region of each window): contiguous runs of the same surface — a window, a terminal pane, a web page — coalesced with their dwell. Returns: - ``by_dwell``: surfaces ranked by TOTAL time spent, longest first (what actually mattered), each with ``dwell_…

  • behavior_patterns

    **CALL FIRST for "who is this user / how do they work" context** — the learned behavior model, not raw memories. Returns the RESIDENT layer of the user's memory: a `root` apex (one synthesized "who is this person, what matters to them now" narrative) plus promoted behavior regularities (`faces` — patterns that survived two independent extraction signals AND resampling stability; each with evidence count + confidence), and evidence-backed observed workflows (`skills`) with their latest playbook. `rendered` is a ready-to-use text block for matching the user's working style without granting actu…

  • correct_memory

    Update the user's memory when they tell you something in it is WRONG. Call this the moment the user corrects a belief about themselves — "Peach isn't my name, it's a colleague", "Research Team is an org, not a person", "Alex J. and Alex Jones are the same person", "I don't live in Beijing anymore". Pass their correction verbatim. This is a directed memory UPDATE (manage memory like model weights): it traces the wrong belief back to its source facts, supersedes them through the memory choke-point (receipts kept — reversible), or retypes/merges the entity, and logs the update. Downstream summar…

  • current_context

    **ALWAYS CALL** for present-tense or ambiguous-pronoun questions about the user's state. Two high-value trigger patterns: 1. Present-tense: *"right now / currently / just now / what am I / what's open"* — this is the tool. 2. Pronoun with no in-conversation antecedent: *"that / this / it / the bug / the error / the file"* — the user is pointing at their screen, not at chat history. Never reply with "I don't have code/context to look at" or ask the user to paste something — call this tool first. If it comes back empty, then ask. Asking for a paste when this tool would have …

  • entity_graph

    **CALL for "who is X / how does X relate to people & projects"** — the relation graph around one identity, optionally AS OF a past date. Returns the resolved canonical identity, its edges (predicate / label / evidence count / validity window), identities reachable within `depth` hops, and `chain_to_user` — how X connects back to the user. Pass `as_of="2026-03-01"` to ask about a PAST state ("who was his boss in March") — edges closed before or opened after that date are excluded. `include_shadow=true` additionally lists UNPROVEN extracted edges, clearly separated — treat them as hints, never …

  • get_model_snapshot

    Return a bounded projection of the versioned Personal Model. The default ``section=overview`` returns model/build stats plus compact Root, Face, and Volume objects. Use ``points``, ``lines``, ``faces``, ``volumes``, ``root``, or ``receipts`` for bounded pages; pass the returned opaque ``cursor`` for the next page, or up to 20 exact ``ids`` for a focused selection. Aggregate evidence-reference arrays stay summarized unless ``include_evidence_refs=true`` on their paged section, and still cannot exceed the result byte budget. ``section=full`` returns a small CLI-export instruction because an unb…

  • get_pending_model_work

    Return pending semantic session counts without invoking any model.

  • get_schema

    Return the memory organization spec (file naming, what each prefix means). Rarely needed at query time. Useful only if you need to reason about WHERE a new fact would be stored, or explain to the user how their memory is organized. For normal "look up a fact" flows, use `search` / `list_memories` directly.

  • list_memories

    **ALWAYS CALL FIRST** on the first personal-context turn of a conversation. List all memory files with descriptions + entry counts. Cheap (one SQLite query, no file reads), so the cost of calling is essentially zero. Call whenever the user asks about themselves, their schedule, preferences, or ongoing work — the response tells you which files exist and what they're about (e.g. `event-YYYY-MM-DD.md` for a given day's session-level activity log; `user-profile.md` for identity; `user-preferences.md` for habits; `project-*.md` / `person-*.md` / `org-*.md` for specific entities). If you're about…

  • persome_setup_check

    Confirm that this model can call Persome memory tools.

  • process_pending_model_work

    Process pending Personal Model sessions using this MCP client's model. This is the user-funded modeling path: Persome requests MCP Sampling from the originating client, so Codex, Claude, or another compatible agent uses its own authenticated model entitlement. Persome never receives the client's login token. The call is explicit and bounded because it may consume the user's agent allowance. Requires the client to advertise MCP Sampling with tools. Clients that only support ordinary MCP tool calls cannot use this path; configure an API/local provider or use a compatible agent instead.

  • query_health_metrics

    Query owner-authorized wearable and health observations. Use for questions about imported steps, heart rate, resting heart rate, active energy, sleep stages, or workouts. Results are raw device observations, not medical conclusions. Filters are exact for `metric` and `provider`; time bounds are ISO 8601 and form [since, until).

  • read_memory

    Read the full contents of ONE memory file the user has on disk. Use after `list_memories` / `search` points you at a promising file. Entries come back chronological. Supports `since` / `until` (ISO timestamps), `tags` (filter by any matching tag), and `tail_n` (most recent N entries only).

  • read_receipt

    Dereference ONE memory receipt — the `⟨entry_id:path⟩` handles that `search`'s `chains` narrative and other tools hand out. Returns the full entry (content, tags, timestamps, validity window, confidence, `superseded` flag) plus `nearby_captures` — breadcrumbs to the NEXT evidence layer (follow with `read_recent_capture(at=…)` for the raw on-screen text or explicitly request its screenshot). Use when you need to verify what a chain hop or a fact is actually based on; this is the audit trail from any memory down to the moment on screen. A `superseded: true` entry is history, not the current bel…

  • read_recent_capture

    Hydrate ONE raw screen capture — the actual visible_text, focused input value, URL, and (optionally) screenshot from the buffer. Use this whenever a compressed memory entry isn't specific enough (e.g. an event-daily entry says "edited main.py at 14:30" but you need the actual code, or "read article" but you need the text). Most event-daily sub_tasks include an inline `raw: read_recent_capture(at=..., app_name=...)` breadcrumb — call it verbatim. For keyword-driven searches across the whole buffer, prefer `search_captures` first; this tool fetches one specific moment. Arguments: at …

Show 7 more tools
  • recent_activity

    **ALWAYS CALL** when the user references yesterday, last week, earlier, or recently. Newest-first cross-file feed of recent memory entries. Best tool for open-ended "what's new / what has the user been up to" questions: "what happened today?" "what was I doing yesterday afternoon?" "anything recent about <topic>?" "catch me up on this week" Use `since` (ISO timestamp) to limit to entries newer than a point in time, and `prefix_filter` (e.g. `['event-', 'project-']`) to scope. Without filters, returns the most recent N entries across ALL files. If the user's question has any tempora…

  • related_events

    **CALL for "what was happening around this memory"** — retrieve the time-adjacent context around ONE specific memory entry, directly. Given an `entry_id` (from any `search` hit, chain receipt, or `verify_fact` evidence), returns `events` — the timeline activity blocks overlapping the memory's moment (apps used, focus excerpt, attention surface) — plus `captures`, the nearest raw-screen breadcrumbs (follow with `read_recent_capture(at=…)`). The anchor is a parseable `occurred_at` when known (when the event actually happened), else its write time. `window_minutes` is the radius on each side of …

  • remember

    Write a durable finding back into Persome memory so later agents can reuse it. Call this when you learn something durable about the user, their project, a tool, or a decision while running. Your entry is force-tagged `source:agent-run` (so it stays distinguishable from the user's own notes). Pass `run_id` = the value of your `$PERSOME_TASK_ID` env var so the finding is attributed to this run. Arguments: content — the finding to remember (a self-contained sentence or two). tags — optional comma-separated extra tags (e.g. "project-x,decision"). run_id — optional; your `$PERSOME_TASK_…

  • resolve_evidence

    Resolve one receipt or model object id through Persome's evidence graph. Use this for a Point, Line, Face, Volume, Root, memory receipt, activity, or capture when the user asks "why?" or "what is this based on?". The response keeps ``sources`` (explicit stored lineage) separate from ``context`` (nearby captures that may help investigation but are NOT claimed as direct inputs). Display ``label`` to people, keep ``reference`` as the technical handle, and read Point predecessor/successor links from ``history``. Follow returned references to drill down one layer at a time. A retained receipt whos…

  • search

    **ALWAYS CALL** before saying "I don't know" — search the user's memory first. Hybrid SEMANTIC + keyword search across COMPRESSED memory: the distilled Markdown layer the user has decided is durable knowledge (preferences, decisions, schedules, project state, people, summaries). It matches by MEANING, not just exact words — you do NOT need the user's original phrasing. Describe what you're looking for in plain natural language and related memory surfaces even when the wording differs (semantic ranking is active when the memory has embeddings; otherwise it degrades to keyword search, same call…

  • search_captures

    **ALWAYS CALL** (usually in parallel with `search`) when the user mentions a keyword they'd have typed or read on screen. Keyword search over RAW screen captures (the uncompressed S1 layer). PREFER this over `search` when the user mentions a keyword they would have *typed* or *read on screen* but that may not have made it into a compressed memory entry yet — e.g. "find when I saw the term 'rate limiter'", "what was that error about pyobjc", "the URL I had open about Postgres replication". `search` only sees compressed memory; this sees every captured screen. When you're not sure which layer h…

  • verify_fact

    **CALL BEFORE STATING time-sensitive facts as current** — freshness check for a single claim against the user's memory. Time-sensitive facts = anything that changes as work progresses: version numbers ("we ship 0.3.9"), task/issue status ("X is still open"), who is working on what, schedules, deadlines. Memory recall is ranked by relevance and can surface a WEEKS-OLD entry that reads like the present. Pass the claim you are about to state (natural language, e.g. `verify_fact(claim="the current version is 0.3.9")`). Returns the freshest live evidence with per-entry `age_days`, plus `stale` (n…

Signals

Stars
1,328
Forks
90
Open issues
7
Contributors
9
Weekly downloads
34
Last commit
Aug 11, 2026 (2 months ago)
Last release
Jul 12, 2026 (3 months ago)
Last package publish
Jul 12, 2026 (3 months ago)

From GitHub (fetched Oct 24, 2026) and the package registry.

Details

Registry name
io.github.Intuition-Lab/personal-model
Version
0.3.2
Auth
No auth
Packages
pypi personal-model
License
Apache-2.0
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from Intuition-Lab

Done for you

Rather not set it up yourself?

Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.

See how we build AI agents →Read the case studies

Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.

launches shipped
50+
launches shipped
media placements
500+
media placements
founders on every account
2
founders on every account

Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block

Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.

Get Persome running in your business

Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.

Goes to the Chalk Labs founders, not the newsletter. Privacy

Need help deploying Persome?

CallGet help
Cite this page

Persome MCP server. Agent Mart. https://agentmart.dev/connectors/intuition-lab-personal-model (last updated 2026-10-24)