About this project
# enfurbish
Claude Code plugins.
Each plugin lives in a sibling directory at the repo root with its own manifest, README, and tests. There is no top-level manifest tying them together — each ships and installs independently.
## Plugins
### [`continuity/`](./continuity) — intentional session continuity
Closes the loop between Claude Code sessions.
- **`/wrap`** ends a session by producing a retro, a tooling-stack verdict, and a `NEXT_SESSION.md` handoff for the next time.
- **`SessionStart` hook** surfaces the handoff at the start of the next session via a `systemMessage` banner — no context dump unless you opt in.
- **`/next`** loads the handoff on demand.
- **Staleness evidence.** `handoffs.ts --since` reports what landed after a handoff was written — the commits, the files they touched, and how much is still uncommitted — so a session that ended without a wrap doesn't leave the next one re-triaging threads that are already done.
See [continuity/README.md](./continuity/README.md) for the tooling-journal format and what `/wrap` measures.
### [`affirm/`](./affirm) — approval gate for project instructions
A speed-bump against prompt injection through `CLAUDE.md`, `.claude/rules/*`, and the files those reach via `@import` (followed two levels deep; imports pointing outside the project are hashed and flagged).
- **`SessionStart` hook** lists project instruction files and warns on any unaffirmed or modified file.
- **`/affirm`** shows what's in scope with status, mtime, and git provenance.
- **`/affirm -a`** records SHA-256 hashes after you've reviewed. Scope covers the project's `CLAUDE.md` / `.claude/rules/*` and the user-global ones under `~/.claude/`; globals stay out of the banner while they still match.
- **`--since <iso>`** lists only what moved inside a window. `continuity`'s `/wrap` runs it with the session's start time, so a change you made yourself is summarized at the end of that session rather than surfacing as a trust warning at the start of the next one.
See [affirm/README.md](./affirm/README.md) for the threat model and storage details.
### [`pastiche/`](./pastiche) — ambient language learning
Vocabulary in the margins of ordinary work, rather than a study session you have to schedule.
- **`SessionStart` hook** injects the items you've gone longest without seeing, plus how to
present them, as `additionalContext`.
- **Four ways in.** Reinforcement of stale items, a small per-session budget of new terms
drawn from whatever you're working on, priming — a term you use yourself gets recorded
instead of taught back at you — and correction, when you fix a form the session got wrong.
- **A markdown ledger** you own and point at from config — one line per term, a `seen:` date
that sessions restamp as they use things. A CLI writes it; the model calls the CLI.
- **No intervals, no ease factors.** Used items rotate to the back; unreinforced ones keep
coming back.
See [pastiche/README.md](./pastiche/README.md) for the ledger format and config.
## Development
Bun, TypeScript-native, no build step, no `package.json`. Bun's built-in test runner.
```bash
# Run all tests across all plugins
bun test
# One plugin
bun test continuity/tests/
bun test affirm/tests/
bun test pastiche/tests/
```
There is no linter or formatter configured.
## Installation
```
/plugin marketplace add nullphase-net/enfurbish
/plugin install continuity@enfurbish
/plugin install affirm@enfurbish
/plugin install pastiche@enfurbish
```
Each installs independently — take one, two, or all three. Per-plugin READMEs cover setup and configuration.
## License
MIT. See [LICENSE](./LICENSE).
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.