Skip to content

devsandip/samaritan

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

2 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Samaritan

An AI PM operating system for capture, file, recall, and weekly synthesis. Brokers between Obsidian (prose), Notion (structured rows), a task manager (TickTick / Todoist / Linear), and Cowork's persistent memory.

Built for solo builders and PMs who want their notes, decisions, and tasks to flow into one queryable system without manual filing. Capture is friction-free; structured deltas land in Notion as the queryable backbone; synthesis runs on a schedule.

Read the story

Three posts walking through what this is, how it works, and the design calls behind it:

What you get

8 capture skills installable as a single Claude Code plugin:

Skill What it does
/log Hourly journal capture (1–3 sentences, project-tagged). Telegram-aware.
/capture Dump a raw thought to today's Inbox. No routing, no questions β€” fast.
/decision File a structured Decision row to Notion + linked Obsidian update + task-manager next steps.
/meeting Process a meeting into a structured Obsidian note + extracted Notion rows + tasks. Fireflies-aware.
/file Direct typed Notion file (decision / insight / person / project). No conversational extraction.
/wrap Session-close: silently file decisions, insights, tasks from the conversation. The single highest-leverage skill.
/recall Grounded query across Notion + Obsidian + task manager. Every claim cited.
/weekly 7-day digest written to Obsidian. Time allocation, decisions, stuck items, next-week focus.

Plus:

  • AGENT_OS.md β€” the operating contract Claude reads on session start (routing rules, skill behavior, scheduled jobs, Notion schemas).
  • CLAUDE.md β€” orientation pointer.
  • Home.md β€” Obsidian dashboard with Dataview queries (today's note, active projects, weekly density, recent meetings).
  • Templates/ β€” 4 Obsidian templates (Daily / Weekly / Meeting / Project).
  • dashboard/dashboard.html β€” Cowork artifact source for a cross-store live dashboard (today's tasks, this week, active projects, recent decisions, etc.).

Prerequisites

  • Cowork (Anthropic's desktop app for knowledge work)
  • Claude API access (Pro / Max / Team / Enterprise)
  • Obsidian with the Dataview community plugin (required for Home.md)
  • Notion workspace (you'll create 4 databases)
  • A task manager with an MCP connector (TickTick, Todoist, Linear, etc.)

Optional but recommended:

  • Journals Obsidian community plugin for multi-stream daily/weekly notes
  • Telegram bot via Claude Code Channels for mobile capture

Quick start

For the impatient. Detailed setup in the next section.

# 1. Clone this repo into your Obsidian vault (or a sub-folder of it)
git clone https://github.com/{{YOUR_GH}}/samaritan.git ~/Documents/Obsidian/Samaritan

# 2. Install Dataview in Obsidian β†’ Community plugins β†’ Browse β†’ Dataview

# 3. Create 4 Notion databases (schemas in AGENT_OS.md) and note their data source IDs

# 4. Replace placeholders in AGENT_OS.md and samaritan-plugin/skills/*/SKILL.md:
#    {{YOUR_VAULT_ROOT}}, {{YOUR_PROJECTS_DS_ID}}, {{YOUR_DECISIONS_DS_ID}},
#    {{YOUR_PEOPLE_DS_ID}}, {{YOUR_INSIGHTS_DS_ID}},
#    {{YOUR_TASK_MANAGER_MCP_ID}}, {{YOUR_NOTION_MCP_ID}}

# 5. Install the plugin
cd samaritan-plugin
zip -r ../samaritan.plugin .
# Then drag samaritan.plugin into Cowork's plugin install UI

# 6. Test
# In Cowork: type "/log testing samaritan"
# Should append to today's daily note. Type "/wrap" to verify silent filing.

Detailed setup

1. Create your Obsidian vault folder

This can be a brand-new vault or a sub-folder inside an existing one. The skills assume the vault is at {{YOUR_VAULT_ROOT}}/Samaritan/ β€” adjust if you put it elsewhere.

2. Drop these files into the vault root

  • AGENT_OS.md β€” the operating contract
  • CLAUDE.md β€” the orientation pointer
  • Home.md β€” the dashboard
  • Templates/ β€” all 4 template files

3. Install Dataview

Settings β†’ Community plugins β†’ Browse β†’ search "Dataview" β†’ install + enable. Required for Home.md to render the tables.

4. (Optional) Install Journals

Settings β†’ Community plugins β†’ Browse β†’ search "Journals" β†’ install. Configure two streams:

  • Samaritan Daily β€” folder Samaritan/Areas/Daily/, format YYYY-MM-DD, template Samaritan/Templates/Daily Note
  • Samaritan Weekly β€” folder Samaritan/Areas/Weekly/, format YYYY-[W]ww, week-start Monday, template Samaritan/Templates/Weekly Note

This gives you Cmd-P β†’ Journals: Open today's note for instant daily navigation. Without it, the /log skill still creates daily notes on demand.

5. Create the 4 Notion databases

Schemas in AGENT_OS.md. Easiest path: create them by hand in Notion, then capture each database's data source ID (the UUID in the URL, looks like xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).

The four databases:

DB Key fields Relations
Projects Name, Status, Owner, Area, Obsidian Link, Task-Manager Project ID, Last Updated Hub
Decisions Decision, Rationale, Project (relation), Decided By (relation), Decided On, Reversibility, Source, Status, Evidence β†’ Project, β†’ People
People Name, Role/Org, Relationship Context, Last Interaction ↔ Projects
Insights Insight, Detail, Source, Tags, Captured On ↔ Projects

6. Replace placeholders

Throughout AGENT_OS.md, samaritan-plugin/skills/*/SKILL.md, and dashboard/dashboard.html:

  • {{YOUR_VAULT_ROOT}} β†’ your absolute vault path
  • {{YOUR_PROJECTS_DS_ID}}, {{YOUR_DECISIONS_DS_ID}}, {{YOUR_PEOPLE_DS_ID}}, {{YOUR_INSIGHTS_DS_ID}} β†’ your Notion data source IDs
  • {{YOUR_TASK_MANAGER_MCP_ID}} β†’ your task manager MCP namespace (the unique ID Cowork assigns)
  • {{YOUR_NOTION_MCP_ID}} β†’ your Notion MCP namespace

Use search-and-replace β€” sed -i or your editor's project-wide replace will work.

7. Install the plugin

Two paths:

Easier: zip the samaritan-plugin/ directory as samaritan.plugin and drag it into Cowork's plugin install UI:

cd samaritan-plugin
zip -r ../samaritan.plugin .

Manual: copy the directory into Cowork's plugin install location (managed by Cowork, not ~/.claude/).

After install, you should see samaritan:log, samaritan:wrap, etc. in your available skills list.

8. Test

In Cowork:

/log testing samaritan

Should append to today's daily note at {{YOUR_VAULT_ROOT}}/Samaritan/Areas/Daily/YYYY-MM-DD.md. Then:

/wrap

Should report what got filed (probably just the log entry plus the session line).

9. (Optional) Set up the dashboard

dashboard/dashboard.html is the Cowork artifact source. To publish:

  1. Open Cowork.
  2. Use the create_artifact MCP tool with the HTML file path.
  3. The artifact appears in your sidebar and refreshes from Notion + task manager on every reload.

10. (Optional) Telegram routing for mobile capture

Set up a Telegram bot per Claude Code Channels docs. Once configured, /log from your phone routes into the desktop Claude Code session and appends to today's daily note.

File reference

File Purpose
AGENT_OS.md Operating contract β€” routing rules, skill behavior, scheduled jobs, Notion schemas. Claude reads on session start. Keep under 3 pages.
CLAUDE.md Orientation pointer β€” ~40 lines. Tells Claude to read AGENT_OS.md and lists the four stores.
Home.md Dashboard at vault root. Dataview queries showing today's note, active projects, weekly density, recent meetings.
Templates/Daily Note.md Daily journal template (Morning briefing / Hourly Log / Inbox / Session sections).
Templates/Weekly Note.md Weekly digest template (TL;DR, Time allocation, Decisions, Insights, Stuck, Next week).
Templates/Meeting Note.md Meeting note template (Context / Discussion / Decisions / Next Steps / Open Questions).
Templates/Project.md Project file template with frontmatter (status, area, owner, notion_id).
samaritan-plugin/.claude-plugin/plugin.json Plugin manifest.
samaritan-plugin/skills/<name>/SKILL.md One per capture skill. Self-contained markdown with YAML frontmatter + behavior contract.
dashboard/dashboard.html Cowork artifact source (~400 lines). Uses Chart.js. Calls 3 MCP tools.
HANDOFF.md Detailed reference for Claude Code helping a fork get this running β€” every skill, every file, debugging tips.

Gotchas to know upfront

A few non-obvious things that bit during the original build:

  • Plugin validation is strict about YAML. Don't use <text> placeholders in skill descriptions (rejected). Don't put unquoted colons inside quoted phrases like "final call: ship X" (YAML mapping error). Use [text] and rephrase to avoid colons.

  • Plugins don't install to ~/.claude/. Cowork manages plugin install in its own app-support directory. ~/.claude/skills/ is for standalone skills only.

  • Dataview path scoping. If you put Samaritan as a sub-folder of a larger Obsidian vault, every Dataview FROM clause needs the parent prefix (FROM "Samaritan/Areas/Daily", not FROM "Areas/Daily"). The queries in Home.md already use the prefix; remove it if Samaritan is your vault root.

  • Counting ### HH:00 headings. Use file.headings not file.lists. The daily template has no other H3 headings, so length(filter(file.headings, (h) => h.level = 3)) is the cleanest counter.

  • Cowork's window.cowork.callMcpTool returns MCP Content protocol responses. Not raw MCP envelopes. The dashboard's unwrapList() function handles both per-record responses (task manager) and envelope responses (Notion). Don't simplify this away β€” without it the cards appear empty despite successful API calls.

  • Notion semantic search can't filter by Status or Tags property values. For "blocked Projects" or "Insights tagged open-question," pull all rows with a broad query ("project", "insight") and filter client-side by title patterns.

HANDOFF.md has the full reference.

Customization

  • The 4 Notion databases have fixed schemas. Field names can be renamed if you also update the corresponding skill files.
  • The capture skills are self-contained markdown files; edit to change behavior.
  • The dashboard is intentionally simple; fork and add cards.
  • The trigger model (live capture / source sweep / session close) is load-bearing β€” don't remove the source sweep; it's what catches what you forget.

Philosophy

  • Capture is dumb on purpose. The /capture skill doesn't classify or route at capture time. The nightly inbox processor (22:00 in the scheduled jobs) classifies later. Two-step capture beats one-step organization every time.
  • /wrap is the single highest-leverage habit. End every Claude session with /wrap β€” silently files decisions, insights, tasks. Without it, every conversation is potentially lost data. With it, every chat auto-deposits.
  • Refuse to invent. /decision asks for rationale if missing rather than fabricating. /recall says "no matching rows" rather than confidently making up an answer.
  • The system improves the system. Scheduled synthesis (mornings, mini-briefings, weekly rollups) compounds the value of captured signal. Hourly logs alone aren't valuable; hourly logs + nightly reconstruction + weekly digest are.

License

MIT. See LICENSE.

Provenance

Built solo over a single intensive session in May 2026 with Claude assistance throughout. Heavy influences:

  • Tiago Forte (PARA / Building a Second Brain)
  • Brian Petro (Smart Connections / Obsidian-AI ecosystem)
  • Khoj.dev (open-source self-hostable AI second brain)
  • The "Claude Code + Obsidian" Medium/Substack community

If you fork this, let me know what you build with it.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages