Package Exports
- @phren/cli
- @phren/cli/auth/profiles
- @phren/cli/core/finding
- @phren/cli/data/access
- @phren/cli/data/tasks
- @phren/cli/paths
- @phren/cli/phren-art
- @phren/cli/runtime-profile
- @phren/cli/session/artifacts
- @phren/cli/session/utils
- @phren/cli/shared
- @phren/cli/shared/retrieval
- @phren/cli/shell/render-api
Readme
phren MCP server
MCP server that indexes your personal phren and exposes it to AI agents via full-text search.
On startup it walks your phren directory, reads all .md files, and builds an in-memory SQLite FTS5 index.
Public surface: 54 MCP tools across 12 modules (search, tasks, findings, memory, data, graph, sessions, ops/review, skills, hooks, config, extraction).
Notable shipped capabilities:
- finding lifecycle tools:
supersede_finding,retract_finding,resolve_contradiction,get_contradictions - finding provenance:
add_finding.source(human|agent|hook|extract|consolidation|unknown) - cross-session continuity: task checkpoints +
session_history - finding impact scoring from injected-context outcomes
- skill registry behavior: scope precedence, alias-collision handling, visibility gating, generated
skill-manifest.json - lifecycle penalties: superseded 0.25×, retracted 0.1×, contradicted 0.4× confidence in retrieval
- inactive findings stripped from FTS index (superseded/retracted findings cannot appear in search)
- auto-tagging: findings without type tags are inferred from content at write time
- session context diff:
session_startreports new findings since last session - decay resistance: confirmed findings decay 3× slower when repeatedly useful
Install
npx @phren/cli initThis sets up phren without needing sudo or a global install. On Windows, use npm install -g @phren/cli if npx isn't available.
Or add manually to Claude Code:
claude mcp add phren -- phren ~/.phrenEnvironment variables
| Variable | Default | Description |
|---|---|---|
PHREN_PATH |
~/.phren |
Path to your phren instance |
PHREN_PROFILE |
(none) | Active profile name. When unset, phren uses machines.yaml when available and otherwise falls back to an unscoped view |
PHREN_ACTOR |
OS user / env | Actor identity used in governance/audit RBAC checks |
Tools
See docs/api-reference.md for the full API reference.
Integration model
- Claude: full native lifecycle hooks (
SessionStart,UserPromptSubmit,Stop,PostToolUse) + MCP - Copilot CLI / Cursor / Codex: MCP + generated hook config + session wrapper binaries
Governance and security highlights
- RBAC uses
.config/access-control.jsonand.runtime/access-control.local.json - Web UI binds loopback-only, uses per-run auth token, enforces CSRF for mutations, and sets CSP headers
- Telemetry is opt-in only (
phren config telemetry on) and stored locally in.runtime/telemetry.json
search_knowledge
Full-text search across all indexed markdown files with synonym expansion.
query: string - FTS5 query (supports AND, OR, NOT, "phrase matching")
limit?: number - Max results, 1-20, default 5
type?: string - Filter: "claude", "findings", "reference", "summary", "task", "skill"
project?: string - Filter to a specific project
tag?: string - Filter findings by type tag: decision, pitfall, pattern, tradeoff, architecture, bug
since?: string - Filter findings by date: "7d", "30d", "YYYY-MM", "YYYY-MM-DD"
status?: string - Filter by lifecycle status: active, superseded, contradicted, stale, invalid_citation, retracted
include_history?: boolean - Include superseded/retracted findings (default false)
synthesize?: boolean - Generate a synthesis paragraph from top results using an LLMget_project_summary
Returns a project's summary.md content, path to its CLAUDE.md, and a list of indexed files.
name: string - Project name (e.g. "my-app", "backend")list_projects
Lists all projects in the active profile with a brief description and which docs exist.
No parameters.
How it works
- Reads
PHREN_PATH(or defaults to~/.phren) - Resolves the active profile from
PHREN_PROFILE, or frommachines.yamlwhen the env var is unset - If no active profile can be resolved yet, falls back to an unscoped view of top-level project directories
- Walks each project directory, reads
.mdfiles, classifies them by filename - Builds an in-memory SQLite FTS5 index with Porter stemming
- Serves tools over stdio using the MCP protocol
File types are derived from filenames: CLAUDE.md -> "claude", summary.md -> "summary", FINDINGS.md -> "findings", tasks.md -> "task", files under reference/ -> "reference", files under skills/ -> "skill".
Development
cd ~/phren
npm install
npm run build # Compile TypeScript
npm run dev # Run with tsx (hot reload)
npm test # Run all tests