Personal data, refracted into every format you need.
A Claude Code plugin (with Codex support) that maintains canonical career data once, then asks the AI to surface it as a hosted HTML landing page, a LaTeX-compiled PDF resume, a LinkedIn About blurb, a GitHub profile README, and a 30-second interview intro.
A prism takes one beam of light and refracts it into every wavelength. Same source-of-truth, every format you need.
The skill is the brain — it tells the AI to read the user's sources, draft entities matching the canonical schema, generate output content per regen, and ask the user before committing.
The CLI is the hands — it validates schemas, atomically writes files, hashes outputs, runs tectonic, fetches GitHub / URLs / PDFs. It never makes content decisions.
Nothing in this repo is hardcoded to one user, one resume template, or
one output style. The bundled default LaTeX template is a fallback; the
user installs their own. Output content (LinkedIn, README, intro, site)
is regenerated per call by the AI — not lock-stepped to a string template.
- Never auto-writes. Every change to
~/.prism/data/*.yamlor~/.prism/outputs/**passes through the CLI safety layer and a user approval prompt. Three tiers: candidate sandbox → canonical promotion → output regen → deploy (deferred v1.5+). - Local-first. Everything lives under
~/.prism/. No cloud sync, no telemetry, no analytics, no remote logging. - You own your outputs. prism is a generator, not a SaaS.
| Path | Purpose |
|---|---|
.claude-plugin/ |
Claude Code plugin manifest + marketplace metadata |
.codex/ |
Codex hooks/config |
commands/ |
/prism * slash commands |
skills/ |
Skill definitions (markdown — guidance for the AI) |
skills/prism/references/ |
Schema examples, output style guides, Realfy rule |
hooks/ |
Session lifecycle scripts |
lib/ |
TypeScript safety layer — schema, atomic I/O, drift hash, tectonic, ingest helpers, CLI dispatcher |
templates/ |
Bundled fallback resume template (Trey Hunner / faangpath variant) |
tests/ |
Bun specs |
bun lib/cli.ts <command> [args]
State: status, validate, pending, config <key> [value], snapshot [--json]
Writes (the AI calls these after the user approves):
stage-candidate <yaml>— sandboxed candidate writeapprove <id>— promote pending → canonicalreject <id>— discardwrite-canonical <kind> <yaml>— wholesale canonical replacementwrite-output <abs-path> <content-file>— atomic output commit + hashregen [resume] [--dry-run]— deterministic LaTeX compilereset --yes [scopes]— wipe~/.prism/for re-testing (--all/--data/--outputs/--templates/--state/--pending)
Read helpers (for the AI to consume sources):
scan-folder <path> [--max-bytes=N] [--json]fetch-github <username> [--json]fetch-url <url>extract-pdf <path>
bun lib/cli.ts help shows the full surface.
The bundled .claude-plugin/marketplace.json declares "name": "prism-dev"
so the source repo is a single-plugin development marketplace. In any
interactive Claude Code session:
/plugin marketplace add /absolute/path/to/prism
/plugin install prism@prism-dev
After that, plain claude auto-loads prism in every future session
(persisted in ~/.claude/settings.json enabledPlugins). See
docs/local-install.md for reload, disable,
and uninstall.
/plugin marketplace add Prasad-178/prism
/plugin install prism@prism-dev
Same install path; just clones the repo into
~/.claude/plugins/marketplaces/prism-dev/ instead of pointing at a
local checkout.
For one-line install via Anthropic's official marketplace, the plugin needs to be submitted at:
Once accepted, the install command becomes:
/plugin install prism@claude-plugins-official
For non-Claude-Code clients (Cursor, Codex, web agents that read
SKILL.md files), prism's skills can be installed via the
vercel-labs/skills CLI once listed:
npx skills add https://github.com/Prasad-178/prism
Submit a PR to vercel-labs/skills to register. Note: this installs only the markdown skills, not the plugin hooks/commands — those need the Claude Code plugin install above.
claude --plugin-dir /Users/prasad/Prasad/projects/prismInside the session, the slash commands are namespaced by plugin name:
/prism Status + subcommand list
/prism-backfill <source-or-path> First-time ingest
/prism-review Approve pending candidates
/prism-regenerate [target] Rebuild outputs
/prism-status State summary
/prism-config <key> [value] Read or set config
/prism-resume-template <subcmd> Install / switch resume templates
/prism-reset [scopes] Wipe ~/.prism/ for re-testing
(Exact prefix may vary by Claude Code version — try both /prism-backfill
and /prism:prism-backfill if one fails.)
Once installed and ~/.prism/config.yaml exists with capture.mode: active,
the plugin's UserPromptSubmit hook injects a per-turn reminder so the
AI watches every conversation for achievement signals — no slash command
required. When you say something like "I just shipped FooBar", the AI
extracts the entity, drafts a Candidate YAML, and stages it in
~/.prism/data/_pending/ via the prism CLI. Run /prism-review later to
batch-approve.
To dial it back: bun lib/cli.ts config capture.sensitivity low or
config capture.mode silent (suppress the hook entirely).
/reload-plugins
To wipe state and re-test from scratch:
bun lib/cli.ts reset --yes --all # everything
bun lib/cli.ts reset --yes --pending # just the candidate queue
bun lib/cli.ts reset --yes --outputs --state # rebuild outputs from canonicalThe CLI refuses suspicious PRISM_HOME values (/, $HOME, /Users,
etc.) so a misconfigured env var cannot delete the wrong directory.
# 1. Stage canonical data (skill normally drafts these; here we use fixtures)
PRISM_HOME=~/.prism-test bun lib/cli.ts write-canonical \
identity tests/fixtures/yaml/identity.yaml
PRISM_HOME=~/.prism-test bun lib/cli.ts write-canonical \
roles tests/fixtures/yaml/roles.yaml
PRISM_HOME=~/.prism-test bun lib/cli.ts write-canonical \
projects tests/fixtures/yaml/projects.yaml
PRISM_HOME=~/.prism-test bun lib/cli.ts write-canonical \
skills tests/fixtures/yaml/skills.yaml
PRISM_HOME=~/.prism-test bun lib/cli.ts write-canonical \
achievements tests/fixtures/yaml/achievements.yaml
# 2. Verify
PRISM_HOME=~/.prism-test bun lib/cli.ts validate
PRISM_HOME=~/.prism-test bun lib/cli.ts snapshot
PRISM_HOME=~/.prism-test bun lib/cli.ts status
# 3. Compile resume PDF (needs tectonic)
mkdir -p ~/.prism-test/templates/resume
cp -r templates/resume/default ~/.prism-test/templates/resume/
PRISM_HOME=~/.prism-test bun lib/cli.ts regen resume
open ~/.prism-test/outputs/resume/resume.pdfFor the linkedin / readme / intro / site outputs, the AI generates the
content per call (see skills/prism-regen/SKILL.md and
skills/prism/references/output-style/*); the CLI commits via
write-output.
| Platform | Command |
|---|---|
| macOS | brew install tectonic |
| Linux | See https://tectonic-typesetting.github.io/en-US/install.html |
| Windows | Same upstream guide |
MIT