pitroom 0.10.0 → 0.11.0
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/.claude-plugin/plugin.json +3 -2
- package/.codex-plugin/plugin.json +1 -1
- package/CHANGELOG.md +19 -0
- package/README.md +10 -2
- package/dist/lib.mjs +2 -0
- package/dist/pitroom.mjs +26 -1
- package/gemini-context.md +5 -0
- package/gemini-extension.json +6 -0
- package/hooks/claude-hooks.json +16 -0
- package/hooks/hooks.json +1 -13
- package/package.json +3 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pitroom",
|
|
3
3
|
"description": "A free pit crew for your expensive coding agent: the superpowers development workflow, run by cheap workers. Delegate research, fixes, tests, reviews and whole plans from Claude Code, Codex or any agent to OpenCode, Codex or Claude Code workers, with receipts that prove the savings.",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.11.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "TahaAtas"
|
|
7
7
|
},
|
|
@@ -18,5 +18,6 @@
|
|
|
18
18
|
"subagents",
|
|
19
19
|
"tokens",
|
|
20
20
|
"workers"
|
|
21
|
-
]
|
|
21
|
+
],
|
|
22
|
+
"hooks": "./hooks/claude-hooks.json"
|
|
22
23
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pitroom",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.0",
|
|
4
4
|
"description": "A free pit crew for your expensive coding agent: delegate research, fixes, tests, reviews and parallel investigations to cheap worker agents running your own models, with verified answers, exact diffs and cost receipts.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "TahaAtas"
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.11.0
|
|
4
|
+
|
|
5
|
+
### Gemini CLI as your primary agent
|
|
6
|
+
- Pitroom installs into Gemini CLI as an extension: `gemini extensions install https://github.com/ATASTECH/pitroom` gives it the 14 skills and a short context file that introduces Pitroom (`gemini-extension.json`, `gemini-context.md`). Gemini CLI also still works as a worker (`-W gemini`); the two are separate. Gemini asks you to confirm the extension. Its session-start hook text did not reach a Gemini session in a test (Gemini probably runs extension hooks only once you trust them), so the context file is what introduces Pitroom there.
|
|
7
|
+
- `hooks/hooks.json` is now valid for both Claude Code and Gemini CLI (a Gemini extension reads that file too and warned about Claude Code's `PostToolUse` event on every session): it holds SessionStart only, with a command that fills `${CLAUDE_PLUGIN_ROOT}` in Claude Code and `${extensionPath}` in Gemini CLI. The card after each `pitroom` command is Claude Code's alone and moved to `hooks/claude-hooks.json`, named by `hooks` in the Claude plugin manifest. `npm run bump` and the release test keep `gemini-extension.json` in step with the version.
|
|
8
|
+
|
|
9
|
+
### Doctor
|
|
10
|
+
- Worker CLIs that are installed but not in your config now get a section ("Gemini CLI (installed, not in your config)") with how to use them, so a new worker is not invisible. They never count as warnings, and a CLI that is not installed stays out of the way.
|
|
11
|
+
- A Gemini API key that Gemini CLI keeps itself is no longer reported as "not signed in".
|
|
12
|
+
- Doctor warns when Pitroom is a Gemini extension and its skills are also linked into `~/.agents/skills`: Gemini would load them twice.
|
|
13
|
+
|
|
14
|
+
### Docs
|
|
15
|
+
- The README has a Gemini CLI install block and a row in the install table.
|
|
16
|
+
|
|
17
|
+
## 0.10.1
|
|
18
|
+
|
|
19
|
+
### Docs
|
|
20
|
+
- The README names Gemini CLI in the quick start (with the API-key requirement), the features, the examples and `pitroom models`; the Gemini star joins Claude and Codex in the hero image. The skills and the marketplace text list Gemini CLI too. The npm page shows the README of the published package, so this is where it reaches it.
|
|
21
|
+
|
|
3
22
|
## 0.10.0
|
|
4
23
|
|
|
5
24
|
### Audits
|
package/README.md
CHANGED
|
@@ -31,7 +31,7 @@ Model-agnostic · Verified answers · Receipts, not vibes · OpenCode / Codex /
|
|
|
31
31
|
|
|
32
32
|
<br />
|
|
33
33
|
|
|
34
|
-
<img src="docs/pitroom-hero.png" alt="Pitroom — a free pit crew for your expensive coding agent. Orange Claw’d
|
|
34
|
+
<img src="docs/pitroom-hero.png" alt="Pitroom — a free pit crew for your expensive coding agent. Orange Claw’d, a blue terminal-faced Codex pet and a purple-blue Gemini star work together at a coding terminal." width="94%" />
|
|
35
35
|
|
|
36
36
|
<br />
|
|
37
37
|
|
|
@@ -260,7 +260,14 @@ codex plugin add pitroom@pitroom
|
|
|
260
260
|
npm i -g pitroom
|
|
261
261
|
```
|
|
262
262
|
|
|
263
|
-
**
|
|
263
|
+
**Gemini CLI**
|
|
264
|
+
|
|
265
|
+
```bash
|
|
266
|
+
gemini extensions install https://github.com/ATASTECH/pitroom
|
|
267
|
+
npm i -g pitroom
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
**Any other agent (Cursor, a plain shell) or just the CLI**
|
|
264
271
|
|
|
265
272
|
```bash
|
|
266
273
|
npm i -g pitroom
|
|
@@ -270,6 +277,7 @@ pitroom install
|
|
|
270
277
|
| Path | You get |
|
|
271
278
|
|---|---|
|
|
272
279
|
| Claude Code plugin | The 14 skills, the session-start hook that introduces Pitroom, and a card after each `pitroom` command. |
|
|
280
|
+
| Gemini CLI extension | The 14 skills and a short context file that introduces Pitroom (Gemini asks you to confirm the extension). Gemini CLI also works as a *worker*, which is separate: see [Workers](#workers). |
|
|
273
281
|
| Codex plugin | The 14 skills, a session-start hook that introduces Pitroom (so it is known even when Codex drops skill descriptions because many are installed), and a card after each `pitroom` command. Codex asks you to trust the plugin's hooks once. The hooks call `pitroom`, which comes from npm (`npm i -g pitroom`). |
|
|
274
282
|
| npm + `pitroom install` | The CLI, and the skills linked into `~/.agents/skills` and `~/.claude/skills`. |
|
|
275
283
|
|
package/dist/lib.mjs
CHANGED
|
@@ -774,6 +774,8 @@ function doctor3({ models, hasFallback }) {
|
|
|
774
774
|
const type = settings().security?.auth?.selectedType;
|
|
775
775
|
if (key || vertex) {
|
|
776
776
|
checks.push({ level: "ok", message: `Gemini CLI: ${key ? "an API key is set" : "Vertex AI is set up"}` });
|
|
777
|
+
} else if (type === "gemini-api-key" || type === "vertex-ai") {
|
|
778
|
+
checks.push({ level: "ok", message: `Gemini CLI: ${type === "vertex-ai" ? "Vertex AI" : "an API key"} is selected (kept by Gemini CLI)` });
|
|
777
779
|
} else if (signedIn && type === "oauth-personal") {
|
|
778
780
|
checks.push({
|
|
779
781
|
level: "warn",
|
package/dist/pitroom.mjs
CHANGED
|
@@ -874,6 +874,8 @@ function doctor3({ models, hasFallback }) {
|
|
|
874
874
|
const type = settings().security?.auth?.selectedType;
|
|
875
875
|
if (key || vertex) {
|
|
876
876
|
checks.push({ level: "ok", message: `Gemini CLI: ${key ? "an API key is set" : "Vertex AI is set up"}` });
|
|
877
|
+
} else if (type === "gemini-api-key" || type === "vertex-ai") {
|
|
878
|
+
checks.push({ level: "ok", message: `Gemini CLI: ${type === "vertex-ai" ? "Vertex AI" : "an API key"} is selected (kept by Gemini CLI)` });
|
|
877
879
|
} else if (signedIn && type === "oauth-personal") {
|
|
878
880
|
checks.push({
|
|
879
881
|
level: "warn",
|
|
@@ -4353,7 +4355,7 @@ function secretWarning(files, mode) {
|
|
|
4353
4355
|
}
|
|
4354
4356
|
|
|
4355
4357
|
// src/core/run.ts
|
|
4356
|
-
var VERSION2 = true ? "0.
|
|
4358
|
+
var VERSION2 = true ? "0.11.0" : "0.0.0-dev";
|
|
4357
4359
|
function planWork(o) {
|
|
4358
4360
|
if (!o.plan) return { task: o.task.trim(), tier: o.tier };
|
|
4359
4361
|
if (o.continueFrom) throw new UserError("a follow-up continues its parent's task; drop --plan/--step");
|
|
@@ -5289,6 +5291,19 @@ function doctor5(probe) {
|
|
|
5289
5291
|
addAll(backend.doctor({ models: [...new Set(models)], hasFallback: chain.length > 1 }));
|
|
5290
5292
|
add("ok", `${backend.name}: read-only runs enforced by ${READ_ONLY_HOW[backend.capabilities.readOnly]}`);
|
|
5291
5293
|
}
|
|
5294
|
+
const unused = allBackends().filter((b) => !byBackend.has(b.id));
|
|
5295
|
+
for (const backend of unused) {
|
|
5296
|
+
let found;
|
|
5297
|
+
try {
|
|
5298
|
+
found = backend.doctor({ models: [], hasFallback: true });
|
|
5299
|
+
} catch {
|
|
5300
|
+
continue;
|
|
5301
|
+
}
|
|
5302
|
+
if (!found.length || found[0].level === "fail") continue;
|
|
5303
|
+
section2(`${backend.name} (installed, not in your config)`);
|
|
5304
|
+
for (const c of found) add("ok", c.message);
|
|
5305
|
+
add("ok", `use it with -W ${backend.id}[:model], or name it in "fallback" or "tiers" in the config`);
|
|
5306
|
+
}
|
|
5292
5307
|
section2("Skills and agents");
|
|
5293
5308
|
addAll(skillChecks());
|
|
5294
5309
|
if (probe && chain[0]) {
|
|
@@ -5364,6 +5379,12 @@ function skillChecks() {
|
|
|
5364
5379
|
else if (names.length) checks.push({ level: "warn", message: `skills in ${base2}: only ${names.join(", ")} of ${all.length}; run \`pitroom install\`` });
|
|
5365
5380
|
else if (!viaPlugin) checks.push({ level: "warn", message: `no Pitroom skills in ${base2}; run \`pitroom install\`` });
|
|
5366
5381
|
}
|
|
5382
|
+
if (geminiExtensionInstalled()) {
|
|
5383
|
+
const linked = installedSkills().some((i) => i.base.includes(`${path24.sep}.agents${path24.sep}`) && i.names.length);
|
|
5384
|
+
checks.push(
|
|
5385
|
+
linked ? { level: "warn", message: "Pitroom is installed as a Gemini CLI extension and linked into ~/.agents/skills: Gemini loads the skills twice; run `pitroom uninstall` or `gemini extensions uninstall pitroom`" } : { level: "ok", message: "Gemini CLI extension installed (skills + context)" }
|
|
5386
|
+
);
|
|
5387
|
+
}
|
|
5367
5388
|
if (viaPlugin) {
|
|
5368
5389
|
const linked = installedSkills().some((i) => i.base.includes(`${path24.sep}.claude${path24.sep}`) && i.names.length);
|
|
5369
5390
|
checks.push(
|
|
@@ -5381,6 +5402,10 @@ function skillChecks() {
|
|
|
5381
5402
|
}
|
|
5382
5403
|
return checks;
|
|
5383
5404
|
}
|
|
5405
|
+
function geminiExtensionInstalled() {
|
|
5406
|
+
const home2 = process.env.GEMINI_CLI_HOME ?? os10.homedir();
|
|
5407
|
+
return fs28.existsSync(path24.join(home2, ".gemini", "extensions", "pitroom"));
|
|
5408
|
+
}
|
|
5384
5409
|
function pluginInstalled() {
|
|
5385
5410
|
try {
|
|
5386
5411
|
const f = path24.join(os10.homedir(), ".claude", "plugins", "installed_plugins.json");
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# Pitroom
|
|
2
|
+
|
|
3
|
+
Pitroom is installed: you can hand bounded work (research, fixes in an isolated copy, tests, reviews) to cheaper worker agents and get back a verified answer, the exact diff and a receipt. You decide, verify and answer.
|
|
4
|
+
|
|
5
|
+
Start with the `using-pitroom` skill (a menu of the `pitroom-*` skills and when each pays off). The CLI is `pitroom` (`npm i -g pitroom`; `pitroom doctor` checks the setup). Use it when it helps; for a small task you can do yourself, skip it.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "pitroom",
|
|
3
|
+
"version": "0.11.0",
|
|
4
|
+
"description": "A free pit crew for your expensive coding agent: hand reading, fixes, tests and reviews to cheap worker agents and get back the answer, the exact diff and a receipt. Fourteen skills adapt a full development workflow. Needs the pitroom command (npm i -g pitroom).",
|
|
5
|
+
"contextFileName": "gemini-context.md"
|
|
6
|
+
}
|
package/hooks/hooks.json
CHANGED
|
@@ -6,23 +6,11 @@
|
|
|
6
6
|
"hooks": [
|
|
7
7
|
{
|
|
8
8
|
"type": "command",
|
|
9
|
-
"command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/session-start.mjs\"",
|
|
9
|
+
"command": "node \"${CLAUDE_PLUGIN_ROOT}${extensionPath}/hooks/session-start.mjs\"",
|
|
10
10
|
"async": false
|
|
11
11
|
}
|
|
12
12
|
]
|
|
13
13
|
}
|
|
14
|
-
],
|
|
15
|
-
"PostToolUse": [
|
|
16
|
-
{
|
|
17
|
-
"matcher": "Bash",
|
|
18
|
-
"hooks": [
|
|
19
|
-
{
|
|
20
|
-
"type": "command",
|
|
21
|
-
"command": "node \"${CLAUDE_PLUGIN_ROOT}/dist/pitroom.mjs\" hook-card",
|
|
22
|
-
"timeout": 10
|
|
23
|
-
}
|
|
24
|
-
]
|
|
25
|
-
}
|
|
26
14
|
]
|
|
27
15
|
}
|
|
28
16
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pitroom",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.0",
|
|
4
4
|
"description": "A free pit crew for your expensive coding agent: the superpowers development workflow, run by cheap workers. Delegate research, fixes, tests, reviews and whole plans from Claude Code, Codex or any agent to OpenCode, Codex, Claude Code or Gemini CLI workers, with receipts that prove the savings.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": "TahaAtas",
|
|
@@ -23,6 +23,8 @@
|
|
|
23
23
|
"policies",
|
|
24
24
|
".claude-plugin",
|
|
25
25
|
".codex-plugin",
|
|
26
|
+
"gemini-extension.json",
|
|
27
|
+
"gemini-context.md",
|
|
26
28
|
"assets",
|
|
27
29
|
"docs/backends.md",
|
|
28
30
|
"README.md",
|