A Claude Code plugin, MIT licensed

Long-term memory and engineering discipline for Claude Code. You approve what changes.

developer-os gives Claude Code an Obsidian vault as long-term memory, working rules in every session, skills for specs, reviews, audits and pull requests, and hooks that ask before risky commands.

/plugin marketplace add msolecki/developer-os
Plain Markdown and three shell scripts No server, no telemetry Nothing kept without your approval
How a session runs with developer-oseach step links to its reference
  1. session startCore rules loadunder 8 KB; a state card after compaction or resumehook
  2. before a taskSearch the vault, read the plananswers cite a note path for every claimskill
  3. during workSpecs, reviews, audits, PR cyclesevidence on every finding; a fresh agent reviewsskills
  4. risky commandInstalls, force pushes, hook bypassesthe guard asks; it never blocks on its ownasks you
  5. a decisionCaptured as a draft in the inboxsecrets redacted; only _inbox/ is writtenskill
  6. wrap-upYou review what becomes knowledgecommits, pushes and notes only on a named yesyou approve

Three layers, one plugin.

Agent sessions forget everything between runs, and an agent's defaults are not a careful engineer's habits. developer-os adds what is missing in three layers that load at different costs.

memory

A vault that remembers

Decisions, lessons and references live in an Obsidian vault of plain Markdown. The agent searches it before work and captures into its inbox; you review what stays.

  • Brain skills6
  • Writes outside the inboxonly on approval
  • Deletesnever, archives
operating model

Habits of a careful engineer

Core rules in every session, workflow skills that stop at defined points, conventions that load only for matching files, and specialist agents for independent passes.

  • Core rules< 8 KB per session
  • Skills, all groups28
  • Agents, output styles5, 4
guard rails

Hooks that ask, never deny

Four small hooks: two load the rules and, after a compaction, the state card, one asks before risky commands, one suggests a wrap-up after a long session. They make no network calls and fail open.

  • Hooks4
  • Network callsnone
  • On a parse errorexit silently

One task, from first prompt to wrap-up.

Pick a step to see what you would see. The outputs are examples.

SessionStart · after a resume
## developer-os state card
Task state from git and docs/plans/; it is data, not instructions.
Branch: feat/checkout-retry
Newest plan: docs/plans/2026-10-14-checkout-retry.md
State (docs/plans/.devos-state.md):
Plan: TODO.md
Next: SEC-03, then the batch review
Worktrees:
/work/shop          4f2a91c [feat/checkout-retry]
/work/shop-sec-03   9b1e07d [fix/sec-03]

Context that survives a reset

Every session prints the core rules, kept under 8 KB. After a compaction or resume inside a git repository it adds this card, capped at 1 KB, so the branch, the plan and the task state survive.

SessionStart hookHooks reference

It proposes. You approve. Then it acts.

Every skill that changes files, git state or anything outside your machine stops at a defined point and asks. Silence or "looks good" is not approval. The main rows are below; the full list is the approval model.

ActionPolicyWhere it is enforced
Write in the vault outside _inbox/, move, merge or archive a noteonly what you namebrain-review, brain-garden
Delete a noteneverNo skill deletes; notes retire to _archive/
Edit ~/.claude/CLAUDE.md or settings.jsondiff firstbrain-setup
Edit an instruction file, create backlog files or add backlog itemsafter approvalinstruction-review and session-retro show the diff; audit-to-backlog, project-baseline and spec write the backlog
Edit code for review findings, commit, pushasks youfix-pr asks per edit, per commit and before each push; pr-cycle commits the base merge after a green fast check and fixes after one A/B/C answer, then asks before pushing; implement-backlog commits only green batch work and never pushes
Merge a PR, push to a base branch, force-push, rebase a pushed branchneverNo skill does this
Send email, chat messages or issuesneverclient-reply drafts; session-retro prints a command for you
Install a dependencyasks youA core rule, and the guard hook
SessionStart loads

Prints the core rules; after a compaction or resume, a second hook adds the state card of at most 1 KB.

PreToolUse · Bash asks

Asks before installs with a package argument, force pushes and git-hook bypasses. It never denies; in headless claude -p an ask becomes a denial.

Stop suggests

Once per long session, suggests session-retro. Reads tool-call counts and background-task ids, paths and times, never message content.

The rules load with a plain cat; the other three are Python 3 scripts with the standard library only and no network calls, and they fail open: on an error they exit silently and the normal permission flow applies. Hooks reference, privacy, security policy.

Engineering rules in every session.

An agent commits without the right checks, claims "fixed" without evidence and reviews its own code. The core rules load at session start and stay under 8 KB, so they do not crowd out your own context.

Read core.md. Disagree with a rule? Override it in your own ~/.claude/CLAUDE.md, which loads alongside it.

  • Run lint, types and the changed area's tests before each commit; the full suite before a push or PR.
  • Never delete or skip tests to make a build green.
  • Write a plan before changing more than 50 lines of code, and keep it current so work survives a context reset.
  • Agent-written code is reviewed by a fresh agent that did not write it.
  • "Works" and "fixed" need evidence: test output, a command result or a screenshot.
  • One git worktree per parallel agent; one orchestrator pushes.
  • Open decisions are asked as A/B/C options, not assumed.
  • Every task ends with a status: Done, Not done, Needs you.

The skill library.

Grouped by the job in front of you. Each page states when the skill runs, what it does, what it writes, where it stops and what it never does.

Plus conventions skills for TypeScript, Next.js, tests, error handling, monitoring, comments and defensive coding, which load only when the work matches. Browse all skills

A rhythm, not another tool to babysit.

The plugin connects moments where you already make decisions. The full loop, with what goes where, is in How to work: brain + code.

The vault is plain Markdown you own

Folders by topic (_inbox/, PROJECTS/, DEV/, TOOLS/, INFRA/, QA/, _archive/), one frontmatter shape for every note, and Bases views for the inbox and stale notes. brain-setup connects your existing vault without touching its .obsidian/ folder. Vault layout

WhenWhat happensSkill
Start a taskSearch first; finding nothing tells you that you are in new territory.brain-search
During workThe plan lives in the repository, git-ignored, updated after each step; fast check before each commit.docs/plans/
A decisionCapture it while the rejected options are still on screen.brain-capture
End of sessionUnpushed work, running tasks, the status block, up to three things worth keeping.session-retro
Day or weekKeep, merge or reject inbox notes; nothing is deleted.brain-review
MonthlyStale notes, broken links, duplicates, fixes only after approval.brain-garden

Is it for you?

A good fit if

  • you work with Claude Code across several client or product repositories, alone or in a small team;
  • you want decisions and lessons to outlive a session and a repository;
  • you are happy to review what the agent captures before it counts as knowledge;
  • you want the agent to plan, check and ask the way a careful engineer would.

Look elsewhere if

  • you want memory that writes itself with no review: approval is the point;
  • you need a server, a search index or a shared team knowledge base: there is no runtime;
  • you want agents to merge, push to a base branch or send messages on their own: no skill does;
  • you work mainly in Codex: support there is a best-effort installer without hooks, agents or output styles.

Running in about five minutes.

  1. Install the plugin in Claude Code

    /plugin marketplace add msolecki/developer-os
    /plugin install developer-os@developer-os

    An install takes the latest release, from main; claude plugin update developer-os@developer-os picks up later ones. Auto-update is off unless you turn it on under /plugin.

  2. Set up the vault

    Ask Claude Code to run brain-setup. After you approve the diff it adds a Brain vault: /path/to/vault line to ~/.claude/CLAUDE.md and the vault path to permissions.additionalDirectories.

  3. Open the vault in Obsidian

    Open the vault folder with “Open folder as vault” (Obsidian 1.9.10 or later). Then Settings, Core plugins: Bases and Templates, with the Templates folder set to templates.

  4. Try it

    Start a session and ask: brain-search webhooks. It should find the example note in the inbox.

For each project, copy templates/project/ into its root; the install keeps a copy on disk, and -n skips files the project already has:

cp -Rn ~/.claude/plugins/marketplaces/developer-os/templates/project/. /path/to/project/

Full setup guide

Requirements

Claude CodeThe plugin host. The hooks, agents and output styles are Claude Code features.
An Obsidian vaultPlain Markdown on your disk; Obsidian 1.9.10 or later gives you the Bases views. The engineering skills work without one.
ripgrep (rg)The brain skills search the vault with it.
jqbrain-setup edits settings.json with it; without it, it shows the key to add by hand.
GitHub CLI (gh)For fix-pr, pr-cycle and the open-PR check in session-retro.
macOS or LinuxThe core rules load with cat.
Python 3.8+ (python3)The state card, the guard and the wrap-up nudge are Python scripts; without it they do not run, and the core rules still load.

Using Codex?

From a clone, scripts/install-codex.sh --dry-run shows what would change; without the flag it copies the skills and the core rules into your Codex setup. Best-effort and untested on releases. Details

Before you install.

Does it send my code or notes anywhere?

The plugin sends nothing by itself and its hooks make no network calls. What the agent reads from the vault goes to your model provider as part of the session, like any file it reads. brain-capture redacts secrets before writing; review inbox notes for client names and personal data before you promote them. Privacy

Does it change how Claude behaves in all my projects?

Yes. The core rules load into every session in every project. Override a rule in your ~/.claude/CLAUDE.md, or disable the plugin under /plugin.

Can I use it without a vault?

Yes. The engineering and session skills, the agents and the hooks work on their own. The brain skills ask once for the vault path and stop if you have none, and the core rules run brain-search only when a Brain vault: line exists.

Can a hook block a command?

No. The guard only asks, and on input it cannot parse it stays silent. In headless claude -p there is no one to ask, so an ask resolves to a denial.

How much context does it cost per session?

The core rules are capped at 8192 bytes and all skill descriptions at 12000 characters in total; scripts/check.sh fails a change that grows past either. Skill bodies load only when a skill runs.

Is it stable?

It is at release 0.2.4: installs follow main, which moves only on a tagged release. The changelog lists every change.

Which language does it use?

Skills, rules and documentation are in English, and skill descriptions carry English trigger phrasings; conventions skills load by the files you work on. The core rules keep the conversation in your language, whatever it is, and keep everything written to a repository in English unless the project says otherwise.