PIANO-esque cognitive layer: persona-keyed state, heartbeat liveness, controller with classify/actuate

Four Claude Code plugins install from this one marketplace, applefeld. Each folder under plugins/ holds one plugin's runtime files and nothing else. A publish job in each plugin's own repository replaces its folder in one commit, so an install follows those commits.
Add the marketplace once, then install the plugins you want:
claude plugin marketplace add SApplefeld/plugins
claude plugin install grimoire@applefeld
claude plugin install personas@applefeld
claude plugin install relay@applefeld
claude plugin install wiki@applefeld
A machine that already registered another marketplace named applefeld removes it first, since one machine cannot hold two marketplaces under one name.
Some plugins need a step past the install. Each step below runs from the plugin's installed folder, <plugin cache>/applefeld/<plugin>/<sha>/, where <plugin cache> is ~/.claude/plugins/cache.
~/.claude/CLAUDE.md lacks the kit's doctrine import, the kit's session hook offers to add it. The kit's doctor checks the machine, and on Windows it runs from the installed payload at <plugin cache>/applefeld/grimoire/<sha>/doctor/doctor.cmd, or as /grimoire:kit-doctor in any session. Add -Fix to apply its repairs.bin/supervise.sh, runs from the installed folder.plugins/relay/ folder, before a session can connect.claude plugin marketplace update applefeld reads the latest commit, and claude plugin update <plugin>@applefeld takes it. No plugin here carries a version number, so each publish is a new version.
hooks/personas.d.ts 21 lines1// The type contract .claude-plugin/plugin.json names under "types": the
2// values this plugin holds in $.state, which the host keeps across a reload
3// of the plugin's code and never persists. memqLaunchDir is the launch
4// directory kitMemq runs memq from, written once by the first session.start
5// that captures one. launchInstructions is the whole text of the latest
6// [SUPERVISOR-PRIMING] prompt the supervisor wrote with the sdk origin,
7// which session.compact repeats directly after a compaction's summary.
8// compactionVerdicts is the compaction pass's verdict cache, one entry per
9// tool result judged this session, by tool_use_id: the verdict the pass
10// applies, the option Jev answered, and whether the stamp fell on the
11// journal's holdout split, where the applied verdict is keep.
12declare module "claude-code" {
13 interface PluginState {
14 "personas": {
15 memqLaunchDir: string;
16 launchInstructions: string;
17 compactionVerdicts: Record<string, { verdict: "keep" | "cut" | "drop"; answered: string; holdout: boolean }>;
18 };
19 }
20}
21