Skip to content

Repository files navigation

prism

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.

How it works

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.

Hard invariants

  • Never auto-writes. Every change to ~/.prism/data/*.yaml or ~/.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.

Layout

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

CLI surface

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 write
  • approve <id> — promote pending → canonical
  • reject <id> — discard
  • write-canonical <kind> <yaml> — wholesale canonical replacement
  • write-output <abs-path> <content-file> — atomic output commit + hash
  • regen [resume] [--dry-run] — deterministic LaTeX compile
  • reset --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.

Install

From a local checkout (works today — superpowers-dev pattern)

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.

From GitHub (also works today, once the repo is pushed)

/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.

claude.com/plugins (pending review)

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

npx skills add (skills.sh)

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.

Local development

claude --plugin-dir /Users/prasad/Prasad/projects/prism

Inside 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.)

Always-on detection

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 after editing skill files

/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 canonical

The CLI refuses suspicious PRISM_HOME values (/, $HOME, /Users, etc.) so a misconfigured env var cannot delete the wrong directory.

Try the CLI without a real Claude session

# 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.pdf

For 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.

Install tectonic (for resume PDF)

Platform Command
macOS brew install tectonic
Linux See https://tectonic-typesetting.github.io/en-US/install.html
Windows Same upstream guide

License

MIT

About

Personal data, refracted into every format you need

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages