MCPcopy Index your code
hub / github.com/Storybloq/storybloq

github.com/Storybloq/storybloq @v1.5.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v1.5.0 ↗ · + Follow
1,677 symbols 6,072 edges 366 files 102 documented · 6%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Storybloq logo

storybloq

Cross-session context persistence for AI coding.

A file convention, a CLI, an MCP server, and a Claude Code skill that together turn every coding session into a building block instead of a reset.

npm version License Node Claude Code compatible

storybloq.com · Mac app · Review lenses · Privacy

Storybloq Mac app showing a live project sidebar alongside a Claude Code terminal


The problem

AI coding assistants are stateless. Every new session starts from zero. The model doesn't know what was built yesterday, what's broken, what decisions were made, or what to work on next. Developers compensate with CLAUDE.md files and scattered notes, but there's no standard structure, no session continuity, and no tooling.

The real cost isn't wasted setup time. It's repeated mistakes, relitigated design decisions, hallucinated context, and linear instead of compounding work.

The idea

Every project gets a .story/ directory of JSON and markdown files. Tickets, issues, roadmap phases, session handovers, and lessons learned all live there, tracked by git, readable by any AI.

  • CLI: storybloq - inspect and mutate .story/ from the terminal.
  • MCP server: 53 tools Claude Code and Codex can call directly, no subprocess spawning.
  • Skill: /story in Claude Code or $story in Codex loads project state at the start of every session.
  • Mac app: native sidebar that watches .story/ and updates live while your AI client works (separate product, free on the App Store).

Install

npm install -g @storybloq/storybloq@latest
storybloq setup --client all

Requires Node.js 20+ and at least one AI client: Claude Code or Codex CLI 0.130.0+. Package lives on npm at @storybloq/storybloq; releases are tagged on this repo at github.com/Storybloq/storybloq/releases.

setup --client all installs the Storybloq skill for Claude and Codex, registers this package as an MCP server, and configures available client hooks. Re-running it is safe. setup-skill remains as a compatibility alias for Claude-only setup.

Upgrading

npm install -g @storybloq/storybloq@latest
storybloq setup --client all

Same two commands as a fresh install: @latest pulls the newest version, and re-running setup refreshes the Storybloq skill files, re-registers the MCP server, and sweeps any stale hook entries from prior installs.

You'll usually see a one-line banner on the next storybloq invocation whenever a newer version is on npm:

storybloq v1.2.0 is available (you have v1.1.6).
Update: npm install -g @storybloq/storybloq@latest

The CLI also silently refreshes the skill dir and migrates any legacy hook entries (for example, from the pre-rename @anthropologies/claudestory package) on the first run after an upgrade — no manual cleanup needed.

Alternative install via the Claude Code plugin system: see Storybloq/plugin-archive (legacy path; storybloq setup --client all is the recommended install).

Bootstrap a project

cd your-project
storybloq init --name "your-project"

For multi-repo projects, see Federation below.

That scaffolds:

.story/
├── config.json         project config + recipe overrides
├── roadmap.json        phase ordering + metadata
├── tickets/            T-001.json, T-002.json, ...
├── issues/             ISS-001.json, ISS-002.json, ...
├── notes/              N-001.json, N-002.json, ...
├── lessons/            L-001.json, ...
├── handovers/          YYYY-MM-DD-<slug>.md
└── snapshots/          state snapshots (gitignored)

Commit everything except .story/snapshots/.

Ticket board showing phases, tickets, and in-progress work

Daily use

Inside Claude Code:

  • /story - loads project status, reads the latest handover, surfaces open tickets and issues, lists blocked work, summarizes recent changes. When the client can run background agents and the actionable backlog is large, it also surfaces the orchestrate working style proactively (a recommendation, still gated by explicit opt-in).
  • /story auto T-001 T-002 ISS-013 - autonomous mode scoped to those items. Drives a ticket through plan -> plan review -> implement -> tests -> code review -> commit with handovers at each checkpoint.
  • /story review T-001 - runs the multi-lens review (see Storybloq/lenses) against a ticket's diff.
  • /story orchestrate - drives a multi-repo (or large single-repo) backlog as an orchestrator: scouts verify state, enrichment agents rewrite items into byte-verified specs, a cheaper tier implements when the client offers one, and the session model reviews and gates every ship.
  • /story handover - writes a session handover capturing decisions, blockers, and next steps.

Outside Claude Code, the same state is one storybloq invocation away.

Autonomous mode running a ticket through plan, implement, test, review

Federation

Federation coordinates AI agent work across multiple repos. One project becomes the orchestrator. It declares which repos (nodes) are part of the system, how they depend on each other, and how they communicate at runtime. Each node keeps its own .story/ with its own tickets, issues, and handovers. The orchestrator reads across all of them.

# Create an orchestrator
storybloq init --type orchestrator --name "my-platform"

# Register nodes
storybloq node add api --path ../api --stack typescript --role "REST backend"
storybloq node add web --path ../web --stack nextjs --depends-on api
storybloq node add sdk --path ../sdk --stack typescript

Three relationship types connect nodes:

  • dependsOn on node config: build-order edges. The web app depends on the API.
  • links on node config: runtime integration. The web app calls the API over HTTP.
  • crossNodeBlockedBy on tickets: a ticket in one repo is blocked until a ticket in another repo is complete. Example: "crossNodeBlockedBy": ["api:T-012"].

From the orchestrator directory:

storybloq status              # aggregated view across all nodes
storybloq recommend           # federation-aware suggestions (bottlenecks, stale nodes, blockers)
storybloq ticket list --node api   # list tickets in the api node without cd-ing

The recommendation engine generates federation-specific suggestions: nodes blocking downstream work, bottleneck nodes depended on by many others, nodes with no handover in two weeks. Tickets with crossNodeBlockedBy refs never surface in recommendations until the blocking ticket is complete.

CLI reference

All commands accept --format json|md (default md). Pipe JSON through jq for scripting, read the markdown variant directly.

Project

Command Description
storybloq init [--name] [--type orchestrator] [--force] Scaffold .story/ (add --type orchestrator for multi-repo)
storybloq status Project summary with phase statuses, counts, and risks
storybloq validate Reference integrity + schema checks
storybloq setup --client claude\|codex\|all [--skip-hooks] Install Storybloq skills, register MCP, and configure client hooks
storybloq setup-skill [--skip-hooks] Compatibility alias for storybloq setup --client claude
storybloq recommend --count N Context-aware work suggestions

Phases

Command Description
storybloq phase list All phases with derived status (status is computed from tickets, never stored)
storybloq phase current First non-complete phase
storybloq phase tickets --phase <id> Leaf tickets for a phase
storybloq phase create --id --name --label --description [--summary] --after/--at-start Create a phase
storybloq phase rename <id> [--name] [--label] [--description] [--summary] Update phase metadata
storybloq phase move <id> --after/--at-start Reorder
storybloq phase delete <id> [--reassign <target>] Delete (reassign contained tickets)

Tickets

Command Description
storybloq ticket list [--status] [--phase] [--type] List leaf tickets (umbrellas excluded)
storybloq ticket get <id> Full ticket detail
storybloq ticket next Highest-priority unblocked ticket
storybloq ticket blocked All currently blocked tickets
storybloq ticket create --title --type --phase [--description] [--blocked-by] [--parent-ticket] [--node <name>] Create (use --node from orchestrator)
storybloq ticket update <id> [--status] [--title] [--phase] [--cross-node-blocked-by] [--node <name>] ... Update
storybloq ticket meta get\|set\|unset <id> [path] [value] Manage custom passthrough metadata
storybloq ticket delete <id> [--force] Delete

Issues

Command Description
storybloq issue list [--status] [--severity] [--component] [--phase] List issues
storybloq issue get <id> Issue detail
storybloq issue create --title --severity --impact [--components] [--related-tickets] [--location] Create
storybloq issue update <id> [--status] [--title] [--severity] ... Update
storybloq issue meta get\|set\|unset <id> [path] [value] Manage custom passthrough metadata
storybloq issue delete <id> Delete

Notes and lessons

Command Description
storybloq note list · note get · note create · note update Brainstorming and idea capture
storybloq lesson list · lesson get · lesson create · lesson update · lesson reinforce Reusable patterns and anti-patterns
storybloq lesson digest Compact summary of all active lessons for skill injection

Handovers, blockers, snapshots

Command Description
storybloq handover list · handover latest · handover get <file> Session continuity documents
storybloq handover create --title --tldr ... Write a new handover
storybloq blocker list · blocker add · blocker clear External dependencies blocking progress
storybloq snapshot · storybloq recap Capture state and diff against the last snapshot
storybloq export [--phase <id>] [--all] [--format json\|md] Self-contained project document

Federation (orchestrator projects)

Command Description
storybloq init --type orchestrator Scaffold an orchestrator .story/ with a nodes map
storybloq node add <name> --path <dir> [--stack] [--role] [--depends-on] [--link] Register a node repo
storybloq node remove <name> [--force \| --prune] Unregister a node (checks for dependents first)
storybloq node update <name> [--stack] [--role] [--depends-on] [--health] Update node metadata
storybloq node list Table of all configured nodes
storybloq config set-federation --allow-node-writes Allow orchestrator to write into node repos

Team (team-mode projects)

See Team mode for the merge model these commands operate on.

Command Description
storybloq team init [--id-allocator local\|git-refs] [--claim-staleness-hours N] Enable team mode on this project
storybloq team setup Install the git merge driver in this clone (each teammate, once per checkout)
storybloq team doctor [--ci] Team health checks; --ci exits non-zero on error findings
storybloq team config show · team config set <key> <value> Inspect or change team configuration
storybloq team reserve <type> --count N Reserve display ids via remote refs (git-refs allocator only)
storybloq reconcile [--dry-run] [--ci] Detect and renumber duplicate display ids
storybloq conflicts list · conflicts show <id> Inspect unresolved merge conflicts
storybloq resolve <id> [--field <f>] [--use ours\|theirs] [--value <json>] Resolve conflicts (also resolve config, resolve roadmap)
storybloq gc [--apply] [--retention-days N] Purge deleted-item tombstones past retention; dry-run without --apply (default 30-day retention)

MCP server reference

Register with Claude Code or Codex (done automatically by setup):

claude mcp add storybloq -s user -- storybloq --mcp
codex mcp add storybloq --env STORYBLOQ_CLIENT=codex -- storybloq --mcp

The server imports the same TypeScript modules as the CLI directly, so there's no subprocess overhead. It auto-discovers the project root by walki

Extension points exported contracts — how you extend this code

WorkflowStage (Interface)
(no doc) [21 implementers]
src/autonomous/stages/types.ts
CloudKitSilentPush (Interface)
* CloudKit silent push payload format. * See: https://developer.apple.com/documentation/cloudkit/cknotification * * C
test/channel/apns-silent-push-contract.test.ts
ApplyBook (Interface)
* Same-batch mutation bookkeeping (ISS-769): keyed replacements and pointer * sets record old-element -> new-value edge
src/core/resolve-doc.ts
PlantOpts (Interface)
(no doc)
test/cli/commands/session-cli.test.ts
SymlinkActiveOpts (Interface)
(no doc)
test/autonomous/session-discovery-containment.test.ts
RegisteredTool (Interface)
(no doc)
test/mcp/issue-list-phase.test.ts
CachedNodeSummary (Interface)
(no doc)
src/federation/cache.ts
GitHubIssue (Interface)
(no doc)
src/feedback/github-client.ts

Core symbols most depended-on inside this repo

makeTicket
called by 626
test/core/test-factories.ts
makeState
called by 491
test/core/test-factories.ts
writeOutput
called by 220
src/cli/run.ts
makePhase
called by 215
test/core/test-factories.ts
formatError
called by 194
src/core/output-formatter.ts
makeRoadmap
called by 192
test/core/test-factories.ts
initProject
called by 176
src/core/init.ts
makeIssue
called by 154
test/core/test-factories.ts

Shape

Function 1,315
Interface 210
Method 102
Class 50

Languages

TypeScript100%

Modules by API surface

src/core/output-formatter.ts58 symbols
src/core/project-loader.ts48 symbols
src/cli/commands/setup-skill.ts37 symbols
src/core/project-state.ts36 symbols
src/cli/register.ts34 symbols
src/autonomous/liveness.ts33 symbols
src/autonomous/guide.ts28 symbols
src/autonomous/session.ts26 symbols
src/autonomous/git-inspector.ts26 symbols
src/core/recommend.ts25 symbols
src/core/merge-driver.ts25 symbols
src/core/team-doctor.ts22 symbols

For agents

$ claude mcp add storybloq \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page