CI & Build / Python lint (push) Successful in 3s
CI & Build / Plugin hooks (push) Successful in 14s
CI & Build / TypeScript typecheck (push) Successful in 53s
CI & Build / integration (push) Successful in 1m7s
CI & Build / Python tests (push) Successful in 1m53s
CI & Build / Build & push image (push) Successful in 36s
g t pushed "/", which now redirects to the dashboard, so it did what g h does. It pushes /knowledge. The overlay gains g r (Rules) and g g (Graph), calls g h "Dashboard", and docs/features.md lists g t. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
133 lines
9.0 KiB
Markdown
133 lines
9.0 KiB
Markdown
# Features
|
|
|
|
Scribe is a self-hosted system of record for the work you do with Claude Code. Claude records what it learned, decided and built, and that record reaches the next session, so a solution is recalled rather than reinvented. There is no language model inside Scribe: Claude reaches it through the MCP endpoint and the Claude Code plugin, and the web UI is where people read and edit the same records.
|
|
|
|
## Notes
|
|
|
|
A Markdown editor (Tiptap) with headings, lists, code blocks and checklists inline, and a `/` menu for blocks.
|
|
|
|
- **Wikilinks**: `[[Title]]` or `[[Title|text]]`, suggested as you type; backlinks show in the viewer.
|
|
- **Tags**, with autocomplete. Hierarchical tags (`area/backend`) match their parent's filter.
|
|
- **Version history**: browse, diff and restore earlier versions of a note.
|
|
- **Draft recovery**: unsaved edits survive a reload.
|
|
|
|
## Tasks
|
|
|
|
A task is a note with a status (`todo`, `in_progress`, `done`, `cancelled`), plus priority, due date, milestone and parent task.
|
|
|
|
- **Kinds**: `work`; `issue`, for corrective work, which can link the task it arose from; and `spike`, a time-boxed investigation whose output is an answer.
|
|
- **Work logs**: timestamped entries that record progress without rewriting the body. They are what the next session reads first.
|
|
- **Claims**: a session that logs on a task holds it, so after a context compaction the work comes back to that session, and other sessions can see who is on it.
|
|
- **Recurring tasks** spawn their next occurrence on a schedule.
|
|
|
|
## Projects, milestones and systems
|
|
|
|
- **Projects** carry a goal, a status and a colour, and group everything else. Entering a project gives Claude a short primer: its goal, recent plans and their next steps, open tasks, its systems and its design system.
|
|
- **Milestones are plans**: a body holding the design (goal, approach, verification) and ordered step tasks. Starting a plan that matches an active milestone hands back that milestone instead of opening a second one.
|
|
- **Systems** are a project's named areas ("auth", "retrieval"). Records are tagged with them, each has a charter saying what belongs there, and each maps to a canonical area shared across projects.
|
|
- **Duplicate gates**: creating a record that reads like an existing one returns the existing one to update instead.
|
|
|
|
## Rules, lessons and moments
|
|
|
|
- **Rulebooks → topics → rules.** A rule in a rulebook applies in every project; a project rule applies only there. A project that departs from a global rule says so with an `overrides` relation.
|
|
- **Rules arrive by retrieval.** Nothing is preloaded: a rule reaches a session when what Claude is about to do matches its trigger (`when_to_apply`), whether that's the operator's message, a command or a file being written.
|
|
- **Moments**: a rule about *when* something is done (finishing a task, reporting back, pushing) can be mounted on a moment of work, and arrives whenever that moment happens, whatever the words look like. Settings → General shows which actions reach each moment.
|
|
- **Versions and verification**: every edit to a rule keeps the text it replaced. A rule that asserts a fact about someone else's software can say how to check it and when it stops being true, and a sweep lists rules due for a check.
|
|
- **Preferences** are rules with the force of guidance rather than obligation.
|
|
- **Lessons** record something learned the hard way, keyed to the situation where it applies, and link to the rules they are instances of.
|
|
- **Reply shapes**: the default shape of Claude's replies (completion report, plan for review, question) arrives at the moment it applies. Settings → General shows them.
|
|
|
|
## Snippets and the shape ledger
|
|
|
|
- **Snippets** are recorded prior art: a reusable piece of code with when to reach for it, its signature and its canonical location in a repo. Claude searches them before building and is shown matching ones before it writes a file.
|
|
- **Forge integration**: with a git forge connected, Scribe checks a snippet's cached body against its source and marks it current or diverged. Push webhooks keep that fresh.
|
|
- **The shape ledger**: Scribe extracts the code shapes from a bound repo and tracks how each is accounted for: an instance of a snippet, a deliberate variant with its reason, or a one-off. Coverage shows what is still unclassified.
|
|
|
|
## Family canon
|
|
|
|
Projects on the same platform (Android apps, Go services, ...) share good ideas. An idea promoted to the family's canon reaches every project on that platform, and each answers it: adopted, a variant with its reason, or owed (filed as a task). `/family` shows the ideas and every project's answers.
|
|
|
|
## Design systems
|
|
|
|
Tokens (colour, type, space, motion, ...) and written guidance, with inheritance: a project's design system can extend a house style and record where it departs. Scribe generates a stylesheet from it, checks code snippets against it, and gives Claude the values to use before it writes UI. `/design-systems` edits them.
|
|
|
|
## Stored processes
|
|
|
|
Saved procedures, such as a drift audit or a DRY pass. The plugin syncs each one into a Claude Code skill (`/scribe:sync`), which fetches the live procedure when it is invoked.
|
|
|
|
## Search and context injection
|
|
|
|
- **Semantic search** over notes, tasks, rules, milestones and systems, with embeddings computed in-process (no external model service). It falls back to keyword search if the embedder is unavailable.
|
|
- **Context injection**: the plugin's hooks show Claude a short menu of possibly relevant records at the moments they matter: rules and prior art when a prompt arrives, before a command or a file write, and when a moment of work is reached. Claude opens a full record only when it judges it relevant.
|
|
- **Tuning**: each surface has its own thresholds and budget, in Settings → General. Every change is logged with its reason, and retrieval telemetry shows what was surfaced and what was opened.
|
|
|
|
## Claude via MCP and the plugin
|
|
|
|
The whole store is reachable through the MCP endpoint at `/mcp`, authenticated with an API key. The Claude Code plugin in this repo adds:
|
|
|
|
- hooks for session start, each prompt, before and after tool calls, the end of a turn, compaction and session end, all failing open if Scribe is unreachable;
|
|
- skills for the working practices: using Scribe, writing plans, systematic debugging, verification, brainstorming, reporting back, reusing code, shape accounting and family canon;
|
|
- your stored processes as skills.
|
|
|
|
See [API Keys & MCP](api-keys-and-mcp.md).
|
|
|
|
## The web UI
|
|
|
|
- **Dashboard**: what to work on next. **Knowledge** browses everything.
|
|
- **Graph** (`/graph`): notes, tasks and tags as a force-directed graph, with physics controls and filtering by tag.
|
|
- **Trash**: deleted records wait here until retention purges them, and can be restored.
|
|
- **Installable** as a desktop or mobile app.
|
|
|
|
## Sharing
|
|
|
|
Share a project, note or task with users or groups, as viewer, editor or admin. Admins manage groups. `/shared` lists what has been shared with you, and an in-app bell notifies you of new shares. Every read and write is checked against ownership and shares.
|
|
|
|
## Export and backup
|
|
|
|
- **Personal export**: your notes and tasks as a Markdown ZIP (with YAML frontmatter) or JSON.
|
|
- **Admin backup and restore**, with ids remapped so a backup restores onto another instance.
|
|
- **Scheduled backups**: a daily, dated, uncompressed tar to a folder or an S3-compatible bucket, laid out so a deduplicating tool such as restic stores only what changed. `python -m scribe.restore` brings a fresh instance back from one. See [Backups](backups.md).
|
|
|
|
## Sign-in
|
|
|
|
Email and password, plus optional OIDC single sign-on (Authentik, Keycloak, ...) that links to a matching local account. Invite links, password reset and signing out other sessions are included. See [SSO / OAuth](sso-oauth.md).
|
|
|
|
## Settings
|
|
|
|
| Tab | Contents |
|
|
|-----|----------|
|
|
| General | Timezone, trash retention, retrieval thresholds, moments, reply shapes |
|
|
| Account | Email, password, active sessions |
|
|
| Profile | About you, response preferences, interests, work schedule |
|
|
| Notifications | Email notifications |
|
|
| Integrations | SearXNG, git forge connections |
|
|
| Data | Export, backup and restore, scheduled backups (admin) |
|
|
| MCP Access | API keys and the command to connect Claude |
|
|
| Config (admin) | What's running, application URL, plugin marketplace, database maintenance, SMTP, forge webhook |
|
|
| Shared areas (admin) | The canonical areas systems map to |
|
|
| Platforms (admin) | The platform catalogue family canon is grouped by |
|
|
| Users (admin) | Registration, invites, users |
|
|
| Logs (admin) | Error, audit and usage logs |
|
|
| Groups (admin) | Groups and membership |
|
|
|
|
## Keyboard shortcuts
|
|
|
|
| Key | Action |
|
|
|-----|--------|
|
|
| `g` `h` | Dashboard |
|
|
| `g` `n` | Notes |
|
|
| `g` `t` | Knowledge (everything, tasks included) |
|
|
| `g` `p` | Projects |
|
|
| `g` `r` | Rules |
|
|
| `g` `g` | Graph |
|
|
| `g` `x` | Trash |
|
|
| `n` | New note |
|
|
| `t` | New task |
|
|
| `e` | Edit the note you're viewing |
|
|
| `/` | Focus search |
|
|
| `?` | Show shortcuts |
|
|
| `j` / `k` | Move through a list |
|
|
| `Enter` | Open the selected item |
|
|
| `Esc` | Close the overlay, leave the field, then go to the dashboard |
|
|
| `Ctrl+S` | Save in the editor |
|