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 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 # View all sessions
256
- juno-code session info abc123 # Session details
257
- juno-code --resume abc123 -p 'continue' # Resume session
258
- juno-code --continue -p 'keep going' # Continue most recent
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/` | (planned) |
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: