prjct-cli 2.23.12 → 2.23.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -1810
- package/README.md +22 -60
- package/dist/bin/prjct-core.mjs +329 -329
- package/dist/daemon/entry.mjs +204 -204
- package/dist/mcp/server.mjs +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# prjct
|
|
1
|
+
# prjct-cli
|
|
2
2
|
|
|
3
|
-
**Project memory + quality workflows for AI coding agents.** prjct gives Claude Code (and any agent) durable memory of your projects: decisions, learnings, gotchas, hot files, recurring bugs. Plus 5 named quality workflows (review, qa, security, investigate, ship) that persist findings back to memory so the next session compounds.
|
|
3
|
+
**Project memory + quality workflows for AI coding agents.** prjct-cli gives Claude Code (and any agent) durable memory of your projects: decisions, learnings, gotchas, hot files, recurring bugs. Plus 5 named quality workflows (review, qa, security, investigate, ship) that persist findings back to memory so the next session compounds.
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/prjct-cli)
|
|
6
6
|
[]()
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
Copy this prompt and paste it in Claude Code (works for fresh install AND upgrade — Claude picks YOUR package manager, doesn't force npm):
|
|
13
13
|
|
|
14
14
|
```text
|
|
15
|
-
Install or upgrade prjct on this machine. First detect which package manager I use globally (check `command -v pnpm`, `command -v bun`, `command -v yarn`, `command -v npm` in that order; also check where any existing `prjct` install lives via `command -v prjct` and use the SAME package manager so we don't create parallel installs). Then run the matching install:
|
|
15
|
+
Install or upgrade prjct-cli on this machine. First detect which package manager I use globally (check `command -v pnpm`, `command -v bun`, `command -v yarn`, `command -v npm` in that order; also check where any existing `prjct` install lives via `command -v prjct` and use the SAME package manager so we don't create parallel installs). Then run the matching install:
|
|
16
16
|
- pnpm: `pnpm install -g prjct-cli@latest`
|
|
17
17
|
- bun: `bun install -g prjct-cli@latest`
|
|
18
18
|
- yarn: `yarn global add prjct-cli@latest`
|
|
@@ -35,9 +35,9 @@ curl -sSL https://raw.githubusercontent.com/jlopezlira/prjct-cli/main/scripts/in
|
|
|
35
35
|
|
|
36
36
|
The script auto-detects platform (mac arm64/intel + linux x64), downloads the right binary from GitHub Releases, sets up `~/.local/bin/prjct` on your PATH, runs `prjct setup` + `prjct sync`, and warns you if a stale package-manager install is shadowing the new binary.
|
|
37
37
|
|
|
38
|
-
### Updating prjct (built-in)
|
|
38
|
+
### Updating prjct-cli (built-in)
|
|
39
39
|
|
|
40
|
-
prjct updates itself. The canonical command is **`prjct update`**, with
|
|
40
|
+
prjct-cli updates itself. The canonical command is **`prjct update`**, with
|
|
41
41
|
**`prjct upgrade`** as an identical alias:
|
|
42
42
|
|
|
43
43
|
```bash
|
|
@@ -61,7 +61,7 @@ What it does, in three phases (`core/commands/update.ts`):
|
|
|
61
61
|
Flags: `--dry-run`, `--yes`/`-y`, `--cleanup` / `--no-cleanup` (default `auto`),
|
|
62
62
|
`--md` (machine-readable output for agents/CI).
|
|
63
63
|
|
|
64
|
-
**Knowing an update exists:** prjct checks at most once every 24h (cached, fully
|
|
64
|
+
**Knowing an update exists:** prjct-cli checks at most once every 24h (cached, fully
|
|
65
65
|
non-blocking — never delays a command) and, after the command's own output,
|
|
66
66
|
prints a one-line banner: `Update available! x.y.z → a.b.c — Run: prjct upgrade`.
|
|
67
67
|
Or set it and forget it: `prjct config set auto-update on` (throttled background
|
|
@@ -71,7 +71,7 @@ Full install + upgrade paths: [INSTALL_PROMPT.md](./INSTALL_PROMPT.md).
|
|
|
71
71
|
|
|
72
72
|
### Native dependency repair
|
|
73
73
|
|
|
74
|
-
prjct uses SQLite for local project memory. On Node installs, that requires the
|
|
74
|
+
prjct-cli uses SQLite for local project memory. On Node installs, that requires the
|
|
75
75
|
`better-sqlite3` native binding. The package install, `prjct install`, and
|
|
76
76
|
daemon startup all verify the binding and retry `npm rebuild better-sqlite3`
|
|
77
77
|
when needed. If a locked-down sandbox blocks the rebuild, install still
|
|
@@ -79,7 +79,7 @@ continues and the daemon retries the repair the next time it starts.
|
|
|
79
79
|
|
|
80
80
|
## What you get
|
|
81
81
|
|
|
82
|
-
After install, **next session in any prjct project**:
|
|
82
|
+
After install, **next session in any prjct-cli project**:
|
|
83
83
|
|
|
84
84
|
- **Lookup-first protocol**: Claude reads `~/Documents/prjct/<slug>/_generated/` (architecture, patterns, decisions, gotchas, recent ships) BEFORE re-exploring source. Cuts ~10K tokens of exploration per session.
|
|
85
85
|
- **Auto-capture**: Stop hook scans the assistant transcript and persists durable insights (decisions/learnings/gotchas) tagged for dedup. The next session finds them in the vault.
|
|
@@ -97,7 +97,7 @@ After install, **next session in any prjct project**:
|
|
|
97
97
|
State lives in **SQLite** at `~/.prjct-cli/projects/<id>/`. The vault at `~/Documents/prjct/<slug>/_generated/` is an auto-regenerated Markdown snapshot — agent-readable via `Read`/`Glob`, browsable in Obsidian.
|
|
98
98
|
|
|
99
99
|
```
|
|
100
|
-
Claude Code session prjct
|
|
100
|
+
Claude Code session prjct-cli
|
|
101
101
|
| |
|
|
102
102
|
| SessionStart hook fires |
|
|
103
103
|
| --------------------------------> | self-heal CLAUDE.md, regen vault
|
|
@@ -137,45 +137,7 @@ detail, worktrees, monorepos: **[docs/storage-and-paths.md](./docs/storage-and-p
|
|
|
137
137
|
|
|
138
138
|
## Execution environments (zero-config)
|
|
139
139
|
|
|
140
|
-
The same binary runs in a plain shell, inside Claude Code, in an OpenAI Codex
|
|
141
|
-
sandbox, or in CI — and **detects which, with no configuration**, then adapts
|
|
142
|
-
output accordingly. Here is the actual *how*.
|
|
143
|
-
|
|
144
|
-
**Mechanism 1 — agent detection** (`core/infrastructure/agent-detector.ts`,
|
|
145
|
-
`isClaudeEnvironment()`). prjct concludes it's inside **Claude** if *any* of
|
|
146
|
-
these is true, evaluated **in this order** (first match wins, result cached for
|
|
147
|
-
the process):
|
|
148
|
-
|
|
149
|
-
1. env var `CLAUDE_AGENT` or `ANTHROPIC_CLAUDE` is set (Claude's runtime sets it);
|
|
150
|
-
2. `global.mcp` is present **or** `MCP_AVAILABLE` is set (MCP is available);
|
|
151
|
-
3. a `CLAUDE.md` file exists in the current working directory;
|
|
152
|
-
4. a `~/.claude/` directory exists;
|
|
153
|
-
5. the cwd path contains `/.claude/` or `/claude-workspace/`.
|
|
154
|
-
|
|
155
|
-
If **none** match, prjct falls back to the **Terminal/CLI** profile — that *is*
|
|
156
|
-
the plain-terminal detection: it's the default when no Claude signal is present.
|
|
157
|
-
**OpenAI Codex** is detected separately (`ai-provider.ts`, `detectCodex()`) by
|
|
158
|
-
the **`codex` CLI binary being on `PATH`** (a stray `~/.codex/` alone is not
|
|
159
|
-
enough); Codex's context file is `AGENTS.md`, skills under `~/.codex/skills/`.
|
|
160
|
-
|
|
161
|
-
**Mechanism 2 — output adaptation** (no flag needed; three independent signals):
|
|
162
|
-
|
|
163
|
-
- **TTY** (`core/utils/output.ts`, `spin()`): `process.stdout.isTTY` decides the
|
|
164
|
-
spinner — `true` (human terminal) → animated branded spinner redrawn with `\r`;
|
|
165
|
-
`false` (Claude Code, Codex, CI, a pipe) → a **single static** `⚡ prjct …`
|
|
166
|
-
line, no animation.
|
|
167
|
-
- **LLM-context gate** (`core/index.ts`):
|
|
168
|
-
`isLlmContext = !process.stdin.isTTY || options.md === true || options.json === true`.
|
|
169
|
-
Commands declared `requiresLlm` refuse to run in a *raw human terminal* unless
|
|
170
|
-
`--md`/`--json` is passed — inside an agent `stdin.isTTY` is already false, so
|
|
171
|
-
they run transparently with no flag.
|
|
172
|
-
- **`--md` / `--json`** (any env): an explicit override — strips the branding
|
|
173
|
-
header/footer, emits machine-structured markdown/JSON.
|
|
174
|
-
|
|
175
|
-
Every signal (env var, `PATH`, TTY, piped stdio) is something the **host sets on
|
|
176
|
-
its own** — prjct reads those ambient facts instead of asking you to declare
|
|
177
|
-
anything. Full per-environment output table:
|
|
178
|
-
**[docs/environments.md](./docs/environments.md)**.
|
|
140
|
+
The same binary runs in a plain shell, inside Claude Code, in an OpenAI Codex sandbox, or in CI, and **adapts output automatically with no configuration**. Detection signals (env vars, MCP, `CLAUDE.md`, `~/.claude/`, the `codex` binary on PATH, `process.stdout.isTTY`) are read silently; `--md` / `--json` are the only overrides. Full per-environment table, source-file references, and the detection order: **[docs/environments.md](./docs/environments.md)**.
|
|
179
141
|
|
|
180
142
|
### What it looks like
|
|
181
143
|
|
|
@@ -216,7 +178,7 @@ In Claude Code, ask naturally:
|
|
|
216
178
|
Optional flags:
|
|
217
179
|
```bash
|
|
218
180
|
prjct config set auto-update on # silent self-update (1/hour throttled)
|
|
219
|
-
prjct team --enforce # pre-commit hook blocks commits without prjct
|
|
181
|
+
prjct team --enforce # pre-commit hook blocks commits without prjct-cli
|
|
220
182
|
```
|
|
221
183
|
|
|
222
184
|
## Inside Claude Code / Gemini CLI
|
|
@@ -293,7 +255,7 @@ Remove with `prjct claude uninstall` (hooks only) or `prjct uninstall` (everythi
|
|
|
293
255
|
|
|
294
256
|
## MCP Server
|
|
295
257
|
|
|
296
|
-
prjct exposes an MCP server with 5 tool groups:
|
|
258
|
+
prjct-cli exposes an MCP server with 5 tool groups:
|
|
297
259
|
|
|
298
260
|
| Group | Tools |
|
|
299
261
|
|---|---|
|
|
@@ -303,7 +265,7 @@ prjct exposes an MCP server with 5 tool groups:
|
|
|
303
265
|
| **workflow** | list, run, log |
|
|
304
266
|
| **code-intel** | related, impact, stale |
|
|
305
267
|
|
|
306
|
-
The broker model: if you already have `linear`, `jira`, `posthog`, `gmail` MCPs wired, prjct **does not duplicate them** — it tells your agent they're available for the current persona and caches your insights locally.
|
|
268
|
+
The broker model: if you already have `linear`, `jira`, `posthog`, `gmail` MCPs wired, prjct-cli **does not duplicate them** — it tells your agent they're available for the current persona and caches your insights locally.
|
|
307
269
|
|
|
308
270
|
## CLI
|
|
309
271
|
|
|
@@ -377,7 +339,7 @@ A combined ranker fuses the three signals (`core/domain/file-ranker.ts`) and pow
|
|
|
377
339
|
|
|
378
340
|
## Issue Tracker Integration
|
|
379
341
|
|
|
380
|
-
Bring your own MCP — prjct doesn't duplicate trackers.
|
|
342
|
+
Bring your own MCP — prjct-cli doesn't duplicate trackers.
|
|
381
343
|
|
|
382
344
|
- **Linear**: configure the official Linear MCP in your agent and declare it in `persona.mcps`.
|
|
383
345
|
- **Jira**: same — use the official Atlassian MCP.
|
|
@@ -425,7 +387,7 @@ prjct-cli/
|
|
|
425
387
|
## Common questions
|
|
426
388
|
|
|
427
389
|
**How do I initialize / register a new project?**
|
|
428
|
-
In any git repo, run `prjct sync` (it auto-runs on the first prjct command) or
|
|
390
|
+
In any git repo, run `prjct sync` (it auto-runs on the first `prjct` command) or
|
|
429
391
|
`prjct init`. This creates `.prjct/prjct.config.json` with a `projectId`, builds
|
|
430
392
|
the SQLite store at `~/.prjct-cli/projects/<projectId>/`, and generates the vault.
|
|
431
393
|
|
|
@@ -449,7 +411,7 @@ argument prints the currently active task.
|
|
|
449
411
|
|
|
450
412
|
**How do I get AI assistance for a coding problem?**
|
|
451
413
|
Inside Claude Code (or any wired agent) describe the problem in natural
|
|
452
|
-
language — prjct maps the intent to a quality workflow and runs its methodology,
|
|
414
|
+
language — prjct-cli maps the intent to a quality workflow and runs its methodology,
|
|
453
415
|
persisting findings to memory. Concrete examples:
|
|
454
416
|
|
|
455
417
|
| You say… | Workflow activated | What it does |
|
|
@@ -464,7 +426,7 @@ project use?" and the agent reads `~/Documents/prjct/<slug>/_generated/patterns.
|
|
|
464
426
|
instead of grepping source (the lookup-first protocol). Outside an agent, every
|
|
465
427
|
command takes `--md` to emit agent-ready markdown.
|
|
466
428
|
|
|
467
|
-
**What does prjct output look like in a normal terminal?**
|
|
429
|
+
**What does prjct-cli output look like in a normal terminal?**
|
|
468
430
|
A branded, **animated** spinner with full colors and interactive prompts (the
|
|
469
431
|
native human experience). See [What it looks like](#what-it-looks-like).
|
|
470
432
|
|
|
@@ -472,9 +434,9 @@ native human experience). See [What it looks like](#what-it-looks-like).
|
|
|
472
434
|
`prjct update` (alias `prjct upgrade`) — auto-detects your package manager, pins
|
|
473
435
|
the true registry-latest, consolidates parallel installs, restarts the daemon.
|
|
474
436
|
A non-blocking 24h-cached banner tells you when one is available. See
|
|
475
|
-
[Updating prjct](#updating-prjct-built-in).
|
|
437
|
+
[Updating prjct-cli](#updating-prjct-cli-built-in).
|
|
476
438
|
|
|
477
|
-
**How does prjct tailor its output for Claude Code specifically?**
|
|
439
|
+
**How does prjct-cli tailor its output for Claude Code specifically?**
|
|
478
440
|
Once it detects Claude (env vars / MCP / `CLAUDE.md` / `~/.claude/`) and sees
|
|
479
441
|
piped stdio (non-TTY), it adapts on every axis, with no flag:
|
|
480
442
|
|
|
@@ -495,7 +457,7 @@ Full per-environment table: [docs/environments.md](./docs/environments.md).
|
|
|
495
457
|
|
|
496
458
|
**What's the output in an OpenAI Codex sandbox?**
|
|
497
459
|
Codex is detected by the `codex` CLI on PATH (context file `AGENTS.md`). The
|
|
498
|
-
sandbox is non-interactive/non-TTY, so prjct emits the same static, prompt-free
|
|
460
|
+
sandbox is non-interactive/non-TTY, so prjct-cli emits the same static, prompt-free
|
|
499
461
|
status line as any agent; add `--md` for fully markdown-structured output.
|
|
500
462
|
|
|
501
463
|
**How do I quickly find the local `.prjct/` directory?**
|
|
@@ -516,10 +478,10 @@ the *other* tiers: DB at `~/.prjct-cli/projects/<projectId>/prjct.db`, vault at
|
|
|
516
478
|
base). The in-repo `.prjct/` holds only config, not state — full detail in
|
|
517
479
|
[docs/storage-and-paths.md](./docs/storage-and-paths.md).
|
|
518
480
|
|
|
519
|
-
**How does prjct detect its environment with no configuration?**
|
|
481
|
+
**How does prjct-cli detect its environment with no configuration?**
|
|
520
482
|
Every signal is something the host sets itself — Claude exports env vars and
|
|
521
483
|
pipes stdio, Codex puts `codex` on PATH, a real terminal has a TTY, CI doesn't.
|
|
522
|
-
prjct reads those ambient facts (precedence in
|
|
484
|
+
prjct-cli reads those ambient facts (precedence in
|
|
523
485
|
[docs/environments.md](./docs/environments.md)) rather than asking you to declare
|
|
524
486
|
anything.
|
|
525
487
|
|