name: jan-cli
description: |
YAML-defined CLI command trees for agents and humans:
- Nested subcommands with progressive `--help` at each level
- Leaf nodes that delegate to real programs (`exec.argv`)
- Optional passthrough of extra CLI args (`exec.passthrough`)
- Remote scripts via `exec.url` + `exec.sha256` (HTTPS fetch, hash verify, TTL cache)
- Remote YAML `include: {url, sha256}` and `jan use https://…/bundle.zip --sha256`
- Script `path`, `dependencies` (other scripts on PATH), `requires` (external tools), and `env`
- Preferred directory via `jan use` (XDG config); `jan --help` lists live subcommands
- SQLite audit log of invocations keyed by git branch (override with `--branch` / `JAN_BRANCH`)
- `jan bundle` / `jan alias` for portable spec export and shell aliases
- `jan list` / `search` / `show` / `validate` / `audit` over the preferred tree
- MkDocs documentation site (`docs/`, `mkdocs.yml`)
language: rust
tags:
- rust
- cli
- yaml
- sqlite
- agents
scripts:
build:
command: cargo build --release
test:
command: cargo test
fmt:
command: cargo fmt
clippy:
command: cargo clippy
run:
command: cargo run --bin jan -- --help
package:
command: cargo package
publish:
command: cargo publish
release:
command: ./scripts/release.sh
release-dry-run:
command: ./scripts/release.sh --dry-run
release-minor:
command: ./scripts/release.sh --minor
release-major:
command: ./scripts/release.sh --major
docs-serve:
command: ./serve.sh
docs-build:
command: ./serve.sh build
roadmap:
done:
- "YAML-defined nested CLI command trees with progressive --help"
- "Leaf exec: argv, passthrough, remote url+sha256, include, jan use bundle.zip"
- "Script path, dependencies, requires, and env in specs"
- "Preferred directory via jan use (XDG config); jan --help lists live subcommands"
- "SQLite audit log keyed by git branch (--branch / JAN_BRANCH override)"
- "jan bundle / alias for portable spec export and shell aliases"
- "jan list / search / show / validate / audit over the preferred tree"
- "MkDocs documentation site (docs/, mkdocs.yml)"
- "Jan cron daemon: long-running scheduler; jan cron start/stop front end (Gradle-style)"
- "Sub-minute cron: 100ms daemon ticks; 5/6/7-field cron YAML; systemd user unit"
- "Cache file tree in daemon: schedules parsed once; tick path is memory-only; jan cron refresh"
in_progress: []
todo:
- "Unix domain socket to Unifier: Jan daemon listens on unifier .daemon/events.sock; wakeup notices include recipient + message id so Jan can wake that agent on the next tick"
- "Dynamic tick agents: unifier events/messages add agents to next tick by name regardless of cron schedule"
- "Span-tree logging: integrate with unifier log for tracing inside Jan cron scripts"
- "Report export: Jan reports exportable as Unifier HTML via daemon for formatting and interactivity"
- "Tick-based agent specs: three-phase sense/decide/act lockstep, scheduling modes (serial, pipelined, drop-on-overflow)"
- "Agent definitions: hot state between ticks, checkpoint watermarks, differential sensing hooks"
- "Inter-agent coordination via Unifier blackboard; global synchronous tick vs independent local tick schedules"
- "Max concurrent job queue: defer n+1 runs under load; log queued work"
- "Factorio factory model: Jan schedules isolated sense/filter/act arms as part of a coordinated system goal"