jan-cli 0.19.0

YAML-defined CLI trees with progressive help, optional exec aliases, merged extra specs, and SQLite audit logging keyed by git branch
Documentation
# `jan cron`

Run script leaves whose `cron:` schedule matches the current local minute, list
upcoming fires, or install jan into the user crontab.

```bash
jan cron --list                         # schedules + next absolute/relative fire
jan cron --list --at "2026-08-05 09:00"  # next fire relative to a civil minute
jan cron --dry-run --at "2026-08-05 10:30"
jan cron                                # run matches for the current local minute
jan cron -v
jan cron install                        # add managed * * * * * jan --no-log cron
jan cron uninstall                      # remove that managed block
```

YAML: [Time triggers](../spec/cron.md).

## Options

| Flag | Description |
|------|-------------|
| `--dry-run`, `-n` | Print matching scripts without running them (also works with `install` / `uninstall`) |
| `--list` | List scripts with time-based triggers, each schedule, and the next fire as absolute local time plus a relative span |
| `--at WHEN` | Match or list against local civil time `YYYY-MM-DD HH:MM` or `YYYY-MM-DDTHH:MM` instead of now |
| `-v`, `--verbose` | Print schedule evaluation details |

## Subcommands

| Subcommand | Description |
|------------|-------------|
| `install` | Install or refresh a managed block in the **user** crontab (`crontab -l` / `crontab -`) that runs `jan --no-log cron` every minute |
| `uninstall` | Remove only the managed `BEGIN/END JAN CRON` block |

The managed block looks like:

```cron
# BEGIN JAN CRON (managed by `jan cron install`; do not edit by hand)
* * * * * '/absolute/path/to/jan' --no-log cron
# END JAN CRON
```

`install` is idempotent: an existing JAN CRON block is replaced. Other crontab lines are left alone. Prefer `jan use` so cron can resolve your tree.

Matching scripts execute their `run` leaf (same as `jan <chain> run`). Failures are reported; jan continues with the remaining matches.