Persistent ground truth for AI coding agents. First-class support for Claude Code, Cursor, and Codex. Stop agents from drifting.
> /plugin marketplace add isaacriehm/cairn> /plugin install cairn@isaacriehm-cairn
FAQ
cairn is a Claude Code plugin with 5 hand-picked skills for development work, indexed on Flowy. Install it with the command on its page. It includes cairn-adopt-components, cairn-adopt, cairn-attention. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.
Repo: isaacriehm/cairn
Persistent ground truth for AI coding agents. First-class support for Claude Code, Cursor, and Codex. Stop agents from drifting.
/plugin marketplace add isaacriehm/cairn
/plugin install cairn@isaacriehm-cairn
/reload-plugins
Settings β Cursor β Plugins β Add from GitHub β isaacriehm/cairn
codex plugin marketplace add isaacriehm/cairn
codex plugin add cairn@cairn
The Problem Β· What You Get Β· Quick Start Β· Glossary Β· How It Works Β· Features Β· Multi-Dev Β· Docs
A cairn is a stack of stones marking a trail. This project stacks the decisions, invariants, and canonical references that define your codebase into a single queryable ground state β so every Claude Code, Cursor, or Codex session starts with the same map.
Monday: you tell your coding agent "auth tokens expire after 24 hours." It ships. Works.
Friday, new session, new prompt. The agent reads auth/tokens.ts, sees
no comment about expiry, and "improves" the code to a 7-day refresh.
You catch it in review. Or you don't.
The model isn't bad. The model has no memory of what you decided.
A bigger context window doesn't fix this β it just delays it. What fixes it is a structured record on disk that every session reads from and writes to. Cairn is that record, plus the runtime that keeps it load-bearing.
Three persistent stores, version-controlled in .cairn/:
πͺ¨ Decisions (DEC-<hash>) β every architectural choice gets a
markdown file with rationale, scope, and a supersedes chain. Once
accepted, canonical until explicitly replaced. The agent reads the
in-scope decisions before touching the affected code.
DEC-a3f7b2c Auth tokens expire after 24 hours
Scope: src/auth/**
Rationale: PCI compliance β short-lived bearer tokens
Supersedes: DEC-7c2f10a (7-day refresh, deprecated 2026-02-14)
π§ Invariants (Β§INV-<hash>) β domain rules whose violation is a
bug, not a style preference. "All API responses must include a
request-id header." Sensors enforce them on every diff at
pre-commit and again at CI.
πΊοΈ Canonical map β topic β file index. Ask
cairn_canonical_for_topic("rate limiting") and get the actual file
paths instead of the agent grepping vaguely or fabricating them.
Plus four runtime layers that keep those stores live: an MCP server (typed tools), a shared agent plugin (skills + hooks + reviewer briefs), sensors (stub-catalog + decision-assertions), and a CLI for bootstrap and debug.
/plugin marketplace add isaacriehm/cairn
/plugin install cairn@isaacriehm-cairn
/reload-plugins
First registers the GitHub repo as a marketplace; second installs the
plugin; third loads it. The plugin ships a self-contained bundle β
hooks, MCP server, and CLI all run from dist/cli.mjs inside the
plugin cache. No npx, no npm install -g, no PATH dependency.
Recommended: disable Claude Code's built-in auto-memory before adopting β Cairn is your memory layer and the two conflict:
/memory β Disable Auto-Memory
Settings β Cursor β Plugins β Add from GitHub β isaacriehm/cairn
Or via the command palette: search "Add Plugin from GitHub", enter
isaacriehm/cairn. Cursor reads .cursor-plugin/marketplace.json
from the repo root and installs packages/cairn-plugin/
directly β same self-contained bundle as Claude Code, no npm install required.
codex plugin marketplace add isaacriehm/cairn
codex plugin add cairn@cairn
The repo marketplace lives at .agents/plugins/marketplace.json. Codex
Desktop and the CLI load the same .codex-plugin/plugin.json, shared
skills, MCP server, hook runtime, and committed bundle. In Codex Desktop,
restart after adding the repo source, open Plugins, select Cairn,
and install it. Review and trust the bundled hooks when Codex prompts;
plugin hooks do not run before that explicit trust step.
Cairn's bounded classification and mapping calls use the CLI of the host
that loaded the pluginβclaude, cursor-agent, or codexβthrough one
shared runner. The host manifests pass their provider explicitly, while a
standalone CLI invocation auto-detects an authenticated supported CLI.
Use --model-provider auto|claude|cursor|codex to override that selection.
The runner exposes semantic fast and capable tiers instead of leaking
provider model names through the codebase. Claude maps those tiers to
Haiku/Sonnet, Codex uses gpt-5.3-codex-spark for Cairn's bounded tasks,
and Cursor uses its auto routing. Calls are non-interactive,
ambient-context isolated, schema-validated, cached per provider, and require
no separate SDK or API key. Codex runs in its read-only sandbox; Cursor runs
without --force from a temporary workspace with project-level shell/read/
write denies.
Open Claude Code, Cursor, or Codex in any project. The plugin auto-detects on
session start and offers [a] adopt now. Pick [a] once. The
pipeline streams inline β typically 2-15 minutes depending on repo
size.
When it finishes, your next session starts with the full ground state preloaded.
If you want cairn directly on your shell PATH (for cairn doctor,
cairn attention, cairn trace, etc.):
npm install -g @isaacriehm/cairn
β¦but the plugin doesn't require it. Outside the plugin, you can adopt via CLI instead:
cairn init
Read this once and the rest of the doc reads cleanly.
| Term | Means |
|---|---|
| DEC | Decision record β one architectural choice with rationale + scope + supersedes chain. |
| Β§INV | Invariant β a domain rule the codebase must obey. Violations are bugs. |
| Scope | The file glob a DEC or Β§INV applies to (src/auth/**, packages/billing/**). |
| Canonical map | topic β file index. The single source of truth for "where does X live?" |
| Sensor | A mechanical check on a diff: stub patterns, decision violations. |
| Attestation | A subagent's signed-off summary of what changed and why; drives task auto-graduation. |
| Drift | When code or docs disagree with the ground state in .cairn/. |
| Bypass | A commit that skipped Cairn's hooks (--no-verify, broken hook path). Detected and surfaced. |
| Attention queue | The pile of DEC drafts, baseline findings, drift events, and conflicts waiting for operator review. |
| Tightener | The host agent step that turns a vague prompt into a structured spec before dispatching subagents. |
Two flows: adoption runs once when you onboard a repo. Daily flow runs on every prompt thereafter.
A single visual pass with 13 phases. The plugin streams output inline so nothing is opaque.
| Phase | What happens |
|---|---|
| 1. Detect | Probe environment + framework signals. |
| 2. Walk | File manifest, extension stats, language detection. |
| 3. Map | Capable-tier domain mapper proposes module boundaries + scope-index.yaml globs. |
| 4. Seed | Write .cairn/ skeleton, config.yaml, grandfather pre-adoption commits into .attested-commits. |
| 5. Pilot | Operator picks a seed module from the mapper's top-3 candidates (one A/B/C question). |
| 6. Brand | Auto-fill brand / voice / product DEC drafts from the mapper's domain summary (one A/B/C). |
| 7. Topic index | Content-fingerprint pre-pass β dedupes facts that appear across docs, source, and rules before drafting DECs. |
| 8, 9, 10 (parallel) | Docs ingest + Source comments ingest + Rules merge (CLAUDE.md / AGENTS.md) β all fast-tier batched. |
| 11. Baseline | First sensor sweep against a synthetic full-tree diff. Findings written to .cairn/baseline/. |
| 12. Strip | Per-module strip-replace consent β operator chooses keep / strip / skip for each flagged module. |
| 13. Multi-dev | Detects package manager, installs git hooks, emits JOIN.md for new contributors. |
After the pipeline finishes, recorded decisions auto-accept into the
ledger (the review checkpoint is the committed diff). The
cairn-attention skill drains what's left β baseline sensor
findings, drift events, and any dedup-fallback drafts β interactively.
You type a prompt
β
βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββ
β Plugin auto-invokes the cairn-direction skill β
β 1. Skill loads in-scope DECs, Β§INVs, β
β and canonical-map entries via MCP β
β 2. Main Claude classifies prompt readiness β
β 3. If unclear β inline A/B/C questions β
β 4. If ready β tightens spec inline, writes β
β .cairn/tasks/active/<id>/spec.tightened.mdβ
β 5. Spec dispatched to subagents β
ββββββββββββββββββ¬ββββββββββββββββββββββββββββββββ
βΌ
Subagents work in your repo with MCP access:
cairn_decisions_in_scope, cairn_invariant_get,
cairn_canonical_for_topic, cairn_search, β¦
β
βΌ
Reviewer subagent attests the diff,
extracts non-obvious decisions as DEC drafts
β
βΌ
Stop hook surfaces inline:
"Review DEC-b1e9c04 draft? [a] accept [b] reject [c] edit"
β
βΌ
You commit β pre-commit hook runs sensors
β CI gate verifies again on PR
β drift caught before merge
The key bit: the agent never starts cold. Every prompt enters with the relevant decisions, invariants, and canonical references already loaded into the spec.
.cairn/.@cairn <ExportName> header; the agent loads the full in-scope
inventory before any UI work and follows USE > EXTEND > CREATE so it
never rebuilds a component that already exists. A check gate blocks
missing headers / duplicate names; an advisory audit flags probable
inline rebuilds.cairn_supersedes_chain.cairn-adopt-components skill
detects the config, dispatches component-annotator subagents to write
@cairn headers, and builds the index + singleton Β§INVs. No manual
header-writing β just ask the agent to adopt the component store.cairn-direction skill β auto-tightens vague prompts ("fix
the bug") into structured specs before dispatch. Loads the
in-scope DECs, Β§INVs, and canonical-map entries automatically.cairn-attention skill β drains the queue of dedup-fallback
DEC drafts, baseline sensor findings, and drift events
interactively (decisions auto-accept; review rides the diff).⬑ cairn in the Claude Code status row
shows pending attention count, bypass warnings, GC state, and the
active task title. Color-codes by absolute token usage.cairn trace pretty-prints unified
per-session events. --tail, --errors-only, --session,
--json flags supported.| Sensor | What it checks |
|---|---|
| Stub-pattern catalog | Regex catalog of incomplete-impl markers (TODO throws, not-implemented, β¦) over the diff. |
| Decision-assertions | Was the in-scope DEC honored? Machine-readable assertions evaluated against the changed tree. |
| Structural | Route handlers non-empty; DTOs carry real validators (no @IsOptional()-only fields). |
The sweep runs as a real gate at pre-commit (cairn sensor-run --staged, blocks on hard findings) and at CI (cairn sensor-run --diff <range> --strict). Live SoT alignment runs separately on every
PostToolUse Write/Edit. The Stop hook surfaces task / GC / attention
state β it does not run the sensor sweep. Drift events log to
.cairn/staleness/log.jsonl and surface on the next GC sweep.
cairn init / join / mcp / gc / scope / doctor / fix / migrate / attention / align / baseline / hook / sensor-run / tag / trace / status-line.cairn-plugin package, thin host manifest
(.cursor-plugin/ + native v1 hooks.cursor.json + mcp.json +
rules/)..codex-plugin/ manifest + PLUGIN_ROOT hooks +
bundled MCP config. Works in Codex Desktop and CLI. Codex handles
multi-file apply_patch calls through the same guardian/alignment
pipeline.dist/; only the host manifests
and protocol serializers differ.Β§INV-<hash>,
Β§DEC-<hash>, TODO(TSK-β¦) inline. Read-only β same ground state,
no separate index.Hover, ghost text, gutter icons, code lens β all resolved live from
.cairn/ground/ ledgers. Read-only. Hovering a @cairn component
header shows its registry entry ([S] singleton; amber drift when the
header name β the exported name).
| Status | Meaning |
|---|---|
β (green) | Active invariant |
β (amber) | Superseded β see chain |
β (red) | Orphan β not in ledger |
Install the latest .vsix from
releases β
Cmd/Ctrl+Shift+P β Extensions: Install from VSIXβ¦. Full setup in
packages/cairn-lens/README.md. Because
the .vsix is not on the Marketplace, Cairn Lens checks npm once a day
and notifies you when a newer release is published (disable via
cairn.lens.checkForUpdates).
Once a project is Cairn-adopted, every developer runs Cairn β locally and at PR time. Defense in depth:
| Layer | What | Catches |
|---|---|---|
| 1. Versioned git hooks | .cairn/git-hooks/{pre,post,commit-msg}-commit | Local commits violating ground state. |
2. cairn join bootstrap | CLI + package.json prepare script | Clones that haven't activated core.hooksPath. |
| 3. CI gate | .github/workflows/cairn-check.yml | --no-verify slipping through. Non-bypassable. |
| 4. Plugin degraded mode | SessionStart banner + MCP guard | Write tools refuse with BOOTSTRAP_REQUIRED until joined. |
Plus Stop-hook bypass detection β flags any HEAD commits not in
.cairn/.attested-commits and surfaces [a] backfill / [b] accept (record DEC) / [c] defer.
After cairn init:
.cairn/
βββ config.yaml slug, version, off_limits, domain
βββ config/ workflow.md, sensors.yaml, stub-patterns.yaml
βββ ground/
β βββ decisions/ DEC-<hash>.md per choice + _inbox/<id>.draft.md
β βββ invariants/ INV-<hash>.md per Β§V rule
β βββ canonical-map/ topic β file index
β βββ components/ derived @cairn inventory (gitignored; rebuilt from headers)
β βββ brand/ overview.md, voice.md
β βββ product/ positioning.md, personas.yaml
β βββ conflicts/ <a-id>__<b-id>.md (DECβINV contradictions)
β βββ alignment-pending/ ambiguous SoT-align cases queued for review
β βββ scope-index.yaml file β DEC/Β§V resolution
βββ baseline/ first-sweep audit YAMLs
βββ tasks/active/<id>/ spec.tightened.md, status.yaml, attestation.yaml
βββ sessions/<session-id>/ per-session status + events
βββ staleness/ drift event log + deferred Layer-A queues
βββ git-hooks/ pre-commit, post-commit, commit-msg
βββ runs/terminal/ one-shot CLI run logs
βββ backups/source/ .original snapshots (rules-merge can revert)
βββ .attested-commits commit log used by bypass detection
βββ JOIN.md new-contributor bootstrap doc
Full contract: docs/FILESYSTEM_LAYOUT.md.
packages/
βββ cairn/ umbrella + CLI bin (`cairn β¦`)
βββ cairn-core/ MCP server, sensors, hooks, init pipeline
βββ cairn-state/ ground-state schemas + low-level I/O
βββ cairn-plugin/ Claude Code + Cursor + Codex plugin (thin manifests, one dist/)
βββ cairn-lens/ VS Code / Cursor extension (.vsix)
User guide β read these to use Cairn day to day:
| Doc | What |
|---|---|
| Core concepts | Decisions, invariants, canonical map, scope, sensors, drift. |
| Using Cairn day to day | What happens on every prompt, after the one-time adoption. |
| Adopting Cairn | The 13-phase adoption pipeline, walked through step by step. |
| Working with decisions | DEC creation paths, file format, supersedes chain, scope design. |
| Cairn for teams | Onboarding contributors, the CI gate, bypass detection. |
| Quick reference | CLI commands, MCP tools, status-line, file locations, slash commands. |
Technical specs β read these when you're modifying Cairn itself:
| Doc | What |
|---|---|
| System Overview | End-to-end surface map + Mermaid diagram of all flows. |
| Architecture | Locked layered model, five-package boundary. |
| Plugin Architecture | Adoption phases, hooks, multi-dev enforcement, question bar. |
| MCP Surface | Tool-by-tool reference. |
| Filesystem Layout | .cairn/ directory contract. |
git clone https://github.com/isaacriehm/cairn
cd cairn
pnpm install
pnpm build
pnpm smokes # default smoke gate; all green on a clean tree
Other root scripts: pnpm typecheck, pnpm clean, pnpm smokes:all
(every declared smoke), pnpm smoke:llm-prompt-eval (opt-in
real-model regression β burns quota). See
AGENTS.md for the full table.
Claude Code reserves 1% of the model's context window for the
skill listing by default. On Opus (1M ctx) that's ~10 000 chars β
plenty of room. On Sonnet (200k ctx) it's ~2 000 chars, which is
tight once you add a few user-level plugins (design skills, image
generators, etc.). The cairn family ships ~3 skills + 3 commands; if
your listing is over budget, Claude Code drops the lowest-priority
descriptions β cairn-direction is a frequent victim, which means
the auto-invoke trigger gate never sees the prompt.
Adoption handles this for you. Phase 1 detect raises
skillListingBudgetFraction to 0.03 in ~/.claude/settings.json
(fits cairn + ~30 user skills on Sonnet). The bump is silent,
idempotent, and only fires when the existing value is missing or
below the floor β operator overrides at or above 0.03 are
preserved. Restart Claude Code after first adoption to pick up the
new budget.
If you ever need to verify, run /doctor. It should report
0 dropped. If a value above 0.03 still shows dropped descriptions,
disable user-level skills you don't use (the /skills UI toggles
each one) or set "user-invocable-only" in skillOverrides (hidden
from the auto-invoke listing, still reachable via /<name>).
Pre-1.0. The Claude Code, Cursor, and Codex plugins are the daily-driven surfaces; the CLI is the bootstrap and debug entrypoint. Issues + PRs welcome.
MIT Β© Isaac Riehm
Cursor plugin by Chris Muntean.
.agents/
plugins/
marketplace.json
.claude-plugin/
marketplace.json
.cursor-plugin/
marketplace.json
.github/
workflows/
ci.yml
publish.yml
.gitignore
.nvmrc
AGENTS.md
CHANGELOG.md
CLAUDE.md
docs/
ARCHITECTURE.md
CONTEXT_ENGINE.md
FILESYSTEM_LAYOUT.md
guide/
adoption.md
concepts.md
daily-flow.md
decisions.md
multi-dev.md
reference.md
MCP_SURFACE.md
PLUGIN_ARCHITECTURE.md
superpowers/
plans/
2026-07-26-provider-neutral-model-runner.md
2026-07-26-tri-host-agent-plugin.md
2026-07-26-v0.33.0-hard-cut.md
specs/
2026-07-26-provider-neutral-model-runner-design.md
2026-07-26-tri-host-agent-plugin-design.md
SYSTEM_OVERVIEW.md
knip.json
LICENSE
package.json
packages/
cairn/
cairn-core/
package.json
src/
align-undo/
index.ts
log.ts
undo.ts
attention/
dedup.ts
index.ts
restore.ts
source-strip.ts
surface.ts
build-globals.d.ts
cites/
expand.ts
components/
audit.ts
check.ts
emit.ts
freshness.ts
index-build.ts
index.ts
reconfirm.ts
context/
handoff-builder.ts
index.ts
spec-delta.ts
task-summary.ts
working-header.ts
decision-capture/
id.ts
index.ts
doctor/
index.ts
drain/
drain.ts
index.ts
events/
index.ts
paths.ts
reader.ts
writer.ts
fix-align/
index.ts
run.ts
sentinel.ts
gc/
apply.ts
attested-commits.ts
canary.ts
citation-integrity.ts
classify.ts
completion-integrity.ts
config-drift.ts
doc-claims.ts
doc-gardening.ts
doc-source-drift.ts
entity-orphan.ts
frontmatter.ts
generator-drift.ts
ghost-anchor.ts
index.ts
quality-update.ts
retire.ts
runtime-prune.ts
scope-coverage.ts
stub-hits.ts
sweep.ts
types.ts
walk-source.ts
hooks/
ask-user-blocked.ts
bypass-detection.ts
defer.ts
ghost-backup.ts
hook-platform.ts
post-tool-use/
allowlist-reader.ts
ask-user-blocked.ts
citation-scanner.ts
copy-scanner.ts
index.ts
legend-builder.ts
post-write.ts
read-enricher.ts
sot-align.ts
write-guardian.ts
pre-commit/
index.ts
sot-align-precommit.ts
runners/
annotate-surface.ts
context-threshold.ts
gc-autotrigger.ts
index.ts
payload.ts
phase-ready-surface.ts
session-end.ts
session-start.ts
stop.ts
user-prompt-submit.ts
seed-attested.ts
session-end.ts
session-start.ts
sot-align-common.ts
stop.ts
index.ts
init/
baseline-audit.ts
brand-derive.ts
brand-setup.ts
claude-rule.ts
curator/
corpus.ts
emit.ts
index.ts
regex-prefilter.ts
validate.ts
walker.ts
detect-components.ts
detect.ts
eta-calibration.ts
index.ts
ingest-docs.ts
init.ts
mapper-merge.ts
mapper-parallel.ts
mapper-prompts.ts
mapper.ts
module-slicer.ts
multi-dev/
index.ts
install.ts
overlay.ts
phases/
1-detect.ts
10-rules-merge.ts
11-baseline.ts
13-multidev.ts
2-walker.ts
3-mapper.ts
4-seed.ts
5-preflight.ts
6-brand.ts
7-topic-index.ts
8-docs-ingest.ts
9a-walker.ts
9b-curate.ts
9c-emit.ts
9d-comp-walk.ts
9e-comp-annotate.ts
9f-comp-emit.ts
index.ts
mapper-output-io.ts
orchestrator.ts
state-io.ts
types.ts
post-git-init.ts
preflight-guards.ts
progress.ts
prompts.ts
rules-merge/
discover.ts
index.ts
ingest.ts
keep-markers.ts
parse-sections.ts
regenerate.ts
seed.ts
skill-budget.ts
sot-emit.ts
source-comments/
classify.ts
index.ts
ingest.ts
strip-replace.ts
walker.ts
submodules.ts
topic-index/
index.ts
judge.ts
resolve.ts
walk.ts
types.ts
visual.ts
walker.ts
workflow-block.ts
invariants/
prune.ts
join/
index.ts
lock.ts
logger.ts
mcp/
bootstrap-guard.ts
context.ts
errors.ts
index.ts
path-allowlist.ts
repo-root.ts
result.ts
schemas.ts
serve.ts
server.ts
telemetry.ts
tools/
attention-dedup.ts
bootstrap-retry.ts
canonical-for-topic.ts
component-annotate.ts
component-get.ts
component-reconfirm.ts
component-register.ts
components-in-scope.ts
decision-get.ts
entity-get.ts
in-scope.ts
index.ts
init-phases.ts
invariant-get.ts
migrate.ts
mission-accept-draft.ts
mission-advance.ts
mission-cli-error.ts
mission-get.ts
mission-plan-phase.ts
mission-resume.ts
mission-resync-accept.ts
mission-resync.ts
mission-set-exit-gate.ts
mission-start.ts
record-decision.ts
resolve-attention.ts
resume.ts
resync.ts
retire-entity.ts
search.ts
task-complete.ts
task-create.ts
task-journal-append.ts
task-reopen.ts
types.ts
migrate/
config-io.ts
gitignore.ts
index.ts
migrations/
0001-drop-dead-config-fields.ts
0002-backfill-gitignore.ts
0003-prune-scaffolding.ts
0004-drop-glob-settings.ts
0005-demote-autofilled-brand.ts
0006-prune-sot-align-invariants.ts
0007-collapse-component-dirs.ts
0008-clean-adoption-scaffolding.ts
0009-repair-archived-cites.ts
0010-model-backend-hard-cut.ts
registry.ts
runner.ts
semver.ts
types.ts
missions/
cli.ts
cursor.ts
draft.ts
index.ts
spec-io.ts
task-link.ts
model/
cache.ts
error.ts
index.ts
provider.ts
runner.ts
structured-output.ts
transports/
claude.ts
codex.ts
cursor.ts
types.ts
types.ts
paths/
index.ts
skip-dirs.ts
profiles/
index.ts
registry.ts
types.ts
unknown.ts
resync/
archive.ts
index.ts
recluster.ts
sensors/
catalog.ts
decisions.ts
diff.ts
index.ts
remediation.ts
runner.ts
shell.ts
stub-catalog.ts
types.ts
session/
session-start/
build.ts
index.ts
templates.ts
events-marker.ts
id.ts
index.ts
seen.ts
touched.ts
state/
persist-ground.ts
rebuild-derived.ts
status-line/
event-queue.ts
format.ts
index.ts
reader.ts
writer.ts
tasks/
index.ts
lifecycle.ts
spec-reader.ts
text/
jaccard.ts
trace/
index.ts
uninstall/
index.ts
update-check.ts
templates/
.cairn/
.gitignore
config/
sensors.yaml
stub-patterns.yaml
trust-policy.yaml
workflow.md
git-hooks/
commit-msg
post-commit
pre-commit
ground/
brand/
overview.md
voice.md
canonical-map/
topics.yaml
manifest.yaml
product/
personas.yaml
positioning.md
JOIN.md
... 304 moreΒ© 2026 Flowy Β· Free and open source
Built for Claude Code Β· Not affiliated with Anthropic