juno-code 1.0.50 → 1.0.53
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/README.md +157 -8
- package/dist/bin/cli.js +3103 -1356
- package/dist/bin/cli.js.map +1 -1
- package/dist/bin/cli.mjs +3082 -1335
- package/dist/bin/cli.mjs.map +1 -1
- package/dist/index.d.mts +26 -12
- package/dist/index.d.ts +26 -12
- package/dist/index.js +407 -67
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +405 -65
- package/dist/index.mjs.map +1 -1
- package/dist/templates/scripts/__pycache__/parallel_runner.cpython-313.pyc +0 -0
- package/dist/templates/scripts/install_requirements.sh +35 -2
- package/dist/templates/scripts/kanban.sh +11 -0
- package/dist/templates/scripts/parallel_runner.sh +602 -131
- package/dist/templates/services/README.md +23 -4
- package/dist/templates/services/__pycache__/pi.cpython-313.pyc +0 -0
- package/dist/templates/services/__pycache__/pi.cpython-38.pyc +0 -0
- package/dist/templates/services/pi.py +1034 -39
- package/dist/templates/skills/claude/ralph-loop/scripts/kanban.sh +11 -0
- package/dist/templates/skills/codex/ralph-loop/scripts/kanban.sh +11 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -30,6 +30,23 @@ juno-code init --task "Your task description" --subagent claude
|
|
|
30
30
|
juno-code init --task "Your task description" --subagent pi
|
|
31
31
|
```
|
|
32
32
|
|
|
33
|
+
### Shell Completion (Tab Autocomplete)
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
# Install completion for your current shell
|
|
37
|
+
juno-code completion install
|
|
38
|
+
|
|
39
|
+
# Or explicitly target a shell
|
|
40
|
+
juno-code completion install bash
|
|
41
|
+
juno-code completion install zsh
|
|
42
|
+
juno-code completion install fish
|
|
43
|
+
|
|
44
|
+
# Check status
|
|
45
|
+
juno-code completion status
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
After installation/reload, `juno-code c<TAB><TAB>` suggests available subcommands.
|
|
49
|
+
|
|
33
50
|
---
|
|
34
51
|
|
|
35
52
|
## The Ralph Method: Where It All Started
|
|
@@ -200,6 +217,22 @@ literal text with `backticks`
|
|
|
200
217
|
EOF
|
|
201
218
|
```
|
|
202
219
|
|
|
220
|
+
### Prompt-time command substitution (per iteration)
|
|
221
|
+
|
|
222
|
+
`juno-code` also supports explicit prompt-time shell substitutions that run inside the working directory on **every engine iteration**:
|
|
223
|
+
|
|
224
|
+
- `!'command'`
|
|
225
|
+
- `!\`\`\`command\`\`\``
|
|
226
|
+
|
|
227
|
+
Examples:
|
|
228
|
+
|
|
229
|
+
```bash
|
|
230
|
+
juno-code claude -i 3 -p "Summarize git status: !'git status --short'"
|
|
231
|
+
juno-code claude -i 2 -p "Recent commits:\n!```git log -n 5 --oneline```"
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
This avoids relying on your shell’s one-time backtick expansion and keeps command output fresh across retries/iterations.
|
|
235
|
+
|
|
203
236
|
## CLI Reference
|
|
204
237
|
|
|
205
238
|
### Core Commands
|
|
@@ -222,6 +255,9 @@ juno-code codex 'your task'
|
|
|
222
255
|
juno-code gemini 'your task'
|
|
223
256
|
juno-code pi 'your task'
|
|
224
257
|
|
|
258
|
+
# Pi live interactive run (auto-exits on non-aborted completion)
|
|
259
|
+
juno-code pi --live -p '/skill:ralph-loop' -i 1
|
|
260
|
+
|
|
225
261
|
# AI-powered test generation
|
|
226
262
|
juno-code test --generate --framework vitest
|
|
227
263
|
juno-code test --run
|
|
@@ -243,6 +279,7 @@ juno-code view-log .juno_task/logs/claude_shell_*.log --output json-only --limit
|
|
|
243
279
|
| `-v, --verbose` | Human-readable verbose output |
|
|
244
280
|
| `-r, --resume <id>` | Resume specific session |
|
|
245
281
|
| `--continue` | Continue most recent session |
|
|
282
|
+
| `--live` | Pi-only: run Pi in interactive TUI mode with auto-exit on non-aborted completion |
|
|
246
283
|
| `--no-hooks` | Skip lifecycle hooks |
|
|
247
284
|
| `--on-hourly-limit <action>` | Quota limit behavior: `wait` (auto-retry) or `raise` (exit) |
|
|
248
285
|
| `--force-update` | Force reinstall all scripts and services |
|
|
@@ -252,12 +289,44 @@ juno-code view-log .juno_task/logs/claude_shell_*.log --output json-only --limit
|
|
|
252
289
|
### Session Management
|
|
253
290
|
|
|
254
291
|
```bash
|
|
255
|
-
juno-code session list
|
|
256
|
-
juno-code session info abc123
|
|
257
|
-
juno-code --resume abc123 -p 'continue'
|
|
258
|
-
juno-code --continue -p 'keep going'
|
|
292
|
+
juno-code session list # View all sessions
|
|
293
|
+
juno-code session info abc123 # Session details
|
|
294
|
+
juno-code --resume abc123 -p 'continue' # Resume session
|
|
295
|
+
juno-code --continue -p 'keep going' # Continue most recent (backend-native)
|
|
296
|
+
juno-code continue 'next prompt' # Reuse last session id + runtime settings snapshot
|
|
259
297
|
```
|
|
260
298
|
|
|
299
|
+
Each `juno-code` run also appends execution history to:
|
|
300
|
+
|
|
301
|
+
- `.juno_task/session_history.json` (unlimited, newest-first)
|
|
302
|
+
|
|
303
|
+
Per-run entries include: initial prompt + timestamp, subagent/model/settings, total cost, turn/message counts, session IDs, and last-message timestamp.
|
|
304
|
+
|
|
305
|
+
CLI run summaries also surface these fields live in the terminal:
|
|
306
|
+
- `Statistics -> Total Cost`
|
|
307
|
+
- `Statistics -> Completed At`
|
|
308
|
+
- `Statistics -> Average Duration` (humanized unit: ms/s/m/h)
|
|
309
|
+
- `Session ID(s)` entries with per-session cost when available
|
|
310
|
+
|
|
311
|
+
For `juno-code continue`, the latest session context is persisted into the project env file (`.env.juno` by default) using **shell-scoped keys** so panes/tabs do not overwrite each other:
|
|
312
|
+
- `JUNO_CODE_LAST_SESSION_ID_SCOPE_<HASH>`
|
|
313
|
+
- `JUNO_CODE_LAST_EXECUTION_SETTINGS_SCOPE_<HASH>` (JSON runtime-settings snapshot)
|
|
314
|
+
|
|
315
|
+
Scope detection prefers terminal markers (for example `TMUX_PANE`, `WEZTERM_PANE`, `TERM_SESSION_ID`) and falls back to the parent shell PID. You can override scope resolution explicitly with `JUNO_CODE_CONTINUE_SCOPE=<name>`.
|
|
316
|
+
|
|
317
|
+
Short help text for scripts that need pane-scoped continue state:
|
|
318
|
+
- Session key pattern: `JUNO_CODE_LAST_SESSION_ID_SCOPE_<HASH>`
|
|
319
|
+
- Settings key pattern: `JUNO_CODE_LAST_EXECUTION_SETTINGS_SCOPE_<HASH>`
|
|
320
|
+
- Deterministic override: set `JUNO_CODE_CONTINUE_SCOPE=<your-pane-id>` before running `juno-code` so external scripts can target a stable scope name across runs.
|
|
321
|
+
|
|
322
|
+
Script endpoint for hash/status lookups:
|
|
323
|
+
```bash
|
|
324
|
+
juno-code continue-scope --json # current scope hash + status
|
|
325
|
+
juno-code continue-scope A1B2C3 --json # lookup by short hash prefix (5-6 chars)
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
`continue-scope` returns `status` as one of: `running`, `finished`, `not_found`, `error`.
|
|
329
|
+
|
|
261
330
|
### Feedback System
|
|
262
331
|
|
|
263
332
|
```bash
|
|
@@ -289,9 +358,9 @@ juno-code skills status
|
|
|
289
358
|
|
|
290
359
|
| Agent | Directory | Skills |
|
|
291
360
|
|-------|-----------|--------|
|
|
292
|
-
| Claude | `.claude/skills/` | `ralph-loop`, `plan-kanban-tasks`, `understand-project` |
|
|
293
|
-
| Codex | `.agents/skills/` | `ralph-loop` |
|
|
294
|
-
| Pi | `.pi/skills/` |
|
|
361
|
+
| Claude | `.claude/skills/` | `kanban-workflow`, `ralph-loop`, `plan-kanban-tasks`, `understand-project` |
|
|
362
|
+
| Codex | `.agents/skills/` | `kanban-workflow`, `ralph-loop`, `plan-kanban-tasks`, `understand-project` |
|
|
363
|
+
| Pi | `.pi/skills/` | `kanban-workflow`, `ralph-loop`, `plan-kanban-tasks`, `understand-project` |
|
|
295
364
|
|
|
296
365
|
### Service Management
|
|
297
366
|
|
|
@@ -306,6 +375,18 @@ juno-code services status
|
|
|
306
375
|
juno-code services install --force
|
|
307
376
|
```
|
|
308
377
|
|
|
378
|
+
### Auth Management (Codex → Pi)
|
|
379
|
+
|
|
380
|
+
```bash
|
|
381
|
+
# Import default Codex auth into Pi auth store
|
|
382
|
+
juno-code auth import-codex
|
|
383
|
+
|
|
384
|
+
# Use explicit input/output paths (useful for account switching/backup files)
|
|
385
|
+
juno-code auth import-codex --input ~/.codex/auth.json --output ~/.pi/agent/auth.json
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
This command translates Codex CLI credentials to Pi's `auth.json` format (`type: "oauth"`) and writes/updates the `openai-codex` provider entry.
|
|
389
|
+
|
|
309
390
|
## Backends & Services
|
|
310
391
|
|
|
311
392
|
### Supported Services
|
|
@@ -315,11 +396,31 @@ juno-code services install --force
|
|
|
315
396
|
| claude | `claude-sonnet-4-6` | `:haiku`, `:sonnet`, `:opus` |
|
|
316
397
|
| codex | `gpt-5.3-codex` | `:codex`, `:codex-mini`, `:gpt-5`, `:mini` |
|
|
317
398
|
| gemini | `gemini-2.5-pro` | `:pro`, `:flash`, `:pro-3`, `:flash-3` |
|
|
318
|
-
| pi | `anthropic/claude-sonnet-4-6` | `:pi`, `:sonnet`, `:opus`, `:gpt-5`, `:codex`, `:api-codex`, `:gemini-pro` |
|
|
399
|
+
| pi | `anthropic/claude-sonnet-4-6` | `:pi`, `:sonnet`, `:opus`, `:gpt-5`, `:codex`, `:api-codex`, `:codex-spark`, `:api-codex-spark`, `:gemini-pro` |
|
|
319
400
|
|
|
320
401
|
> **Pi** is a multi-provider coding agent that supports Anthropic, OpenAI, Google, Groq, xAI, and more.
|
|
321
402
|
> It requires separate installation: `npm install -g @mariozechner/pi-coding-agent`
|
|
322
403
|
|
|
404
|
+
### Pi Live Mode (`--live`)
|
|
405
|
+
|
|
406
|
+
Use live mode when you want Pi's interactive TUI while keeping juno-code iteration hooks/statistics.
|
|
407
|
+
|
|
408
|
+
```bash
|
|
409
|
+
# Canonical live flow
|
|
410
|
+
juno-code pi --live -p '/skill:ralph-loop' -i 1
|
|
411
|
+
|
|
412
|
+
# If :pi default model is unavailable in your Pi provider setup, pick an explicit available model
|
|
413
|
+
juno-code pi --live -m :api-codex -p '/skill:ralph-loop' -i 1
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
Notes:
|
|
417
|
+
- `--live` is validated as **Pi-only** (`juno-code pi ...`).
|
|
418
|
+
- `--live` requires extensions enabled (`--no-extensions` is incompatible).
|
|
419
|
+
- Live auto-exit is triggered on non-aborted `agent_end` only. Pressing `Esc` to interrupt the current run keeps Pi open so you can continue interacting.
|
|
420
|
+
- To manually leave Pi and return control to juno-code hooks/loop, use Pi's normal exit keys (for example `Ctrl+C` twice quickly or `Ctrl+D` on an empty editor).
|
|
421
|
+
- Best experience is an interactive terminal (TTY) so Pi TUI can manage screen state cleanly.
|
|
422
|
+
- Pi TUI depends on the Node runtime used to launch Pi; use a modern Node version (Node 20+) in PATH.
|
|
423
|
+
|
|
323
424
|
### Custom Backends
|
|
324
425
|
|
|
325
426
|
Service scripts live in `~/.juno_code/services/`. Each is a Python script that accepts standard args (`-p/--prompt`, `-m/--model`, `-v/--verbose`) and outputs JSON events to stdout.
|
|
@@ -448,6 +549,30 @@ Orchestrate N concurrent juno-code processes with queue management, structured o
|
|
|
448
549
|
./.juno_task/scripts/parallel_runner.sh --stop-all
|
|
449
550
|
```
|
|
450
551
|
|
|
552
|
+
#### Dedicated Example: SEO landing-page batch in tmux panes
|
|
553
|
+
|
|
554
|
+
Use this pattern when you want to generate many related content tasks in parallel while keeping live visibility per worker pane:
|
|
555
|
+
|
|
556
|
+
```bash
|
|
557
|
+
./.juno_task/scripts/parallel_runner.sh \
|
|
558
|
+
-s pi \
|
|
559
|
+
-m zai/glm-5 \
|
|
560
|
+
--kanban-filter "--tag SEO_LANDING_PAGES --limit 200 --status backlog,in_progress,todo" \
|
|
561
|
+
--parallel 5 \
|
|
562
|
+
--tmux panes \
|
|
563
|
+
--prompt-file ./tmp_prompt/content_gen.md
|
|
564
|
+
```
|
|
565
|
+
|
|
566
|
+
What each flag does:
|
|
567
|
+
|
|
568
|
+
- `-s pi -m zai/glm-5`: run workers with Pi on a specific model.
|
|
569
|
+
- `--kanban-filter "..."`: dynamically pull task IDs from kanban (here: only `SEO_LANDING_PAGES`, up to 200, only open statuses).
|
|
570
|
+
- `--parallel 5`: execute up to 5 tasks concurrently.
|
|
571
|
+
- `--tmux panes`: split workers into panes for side-by-side monitoring.
|
|
572
|
+
- `--prompt-file ./tmp_prompt/content_gen.md`: keep a reusable, versioned instruction template instead of long inline prompts.
|
|
573
|
+
|
|
574
|
+
Tip: keep the filter string quoted so it is passed as one argument to `parallel_runner.sh` and then correctly forwarded to `kanban.sh`.
|
|
575
|
+
|
|
451
576
|
#### Output & Extraction
|
|
452
577
|
|
|
453
578
|
- **Per-task JSON**: `{output_dir}/{task_id}.json` with exit code, wall time, extracted response
|
|
@@ -660,6 +785,30 @@ The kanban.sh script wraps juno-kanban. Here are the actual commands:
|
|
|
660
785
|
4. Global config files
|
|
661
786
|
5. Hardcoded defaults
|
|
662
787
|
|
|
788
|
+
### Per-subagent default models
|
|
789
|
+
|
|
790
|
+
Set model defaults per subagent without changing your global default:
|
|
791
|
+
|
|
792
|
+
```bash
|
|
793
|
+
juno-code pi set-default-model :api-codex
|
|
794
|
+
juno-code claude set-default-model :opus
|
|
795
|
+
juno-code codex set-default-model :gpt-5
|
|
796
|
+
```
|
|
797
|
+
|
|
798
|
+
This writes to `.juno_task/config.json`:
|
|
799
|
+
|
|
800
|
+
```json
|
|
801
|
+
{
|
|
802
|
+
"defaultModels": {
|
|
803
|
+
"pi": ":api-codex",
|
|
804
|
+
"claude": ":opus",
|
|
805
|
+
"codex": ":gpt-5"
|
|
806
|
+
}
|
|
807
|
+
}
|
|
808
|
+
```
|
|
809
|
+
|
|
810
|
+
`juno-code` resolves models in this order: CLI `--model` → configured subagent default (`defaultModels` / legacy `defaultModel`) → built-in default.
|
|
811
|
+
|
|
663
812
|
### Project Env Bootstrap (`.env.juno`)
|
|
664
813
|
|
|
665
814
|
`juno-code` now bootstraps a project env file automatically:
|