jan-cli 0.27.0

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

By default, every **leaf execution** is logged to SQLite. Treat the database as **privacy-sensitive telemetry**, not as non-repudiation: it is locally mutable, may contain CLI secrets from passthrough argv, and is created with the process umask.

`jan test` and `--no-log` / `JAN_NO_LOG` skip writes.

## Columns

| Column | Content |
|--------|---------|
| `ts` | Unix timestamp |
| `git_branch` | From `--branch`, `JAN_BRANCH`, or `git rev-parse` in `--cwd` |
| `cwd` | Working directory |
| `command_path` | Matched subcommand chain (e.g. `git s`) |
| `argv_json` | Full argv passed to the child process |
| `exit_code` | Child exit code |
| `spec_root_id` | Link to which spec tree was used |

Default path: see [Command line](../usage/cli.md#audit-log-defaults). Override with `--db` / `JAN_DB`.

Useful for agent workflows: each git branch gets a separate audit trail of which `jan` commands ran.

## `jan audit`

```bash
jan audit recent
jan audit recent --limit 50
jan audit stats
jan audit stats git
jan audit cleanup --days 30
```

| Subcommand | Description |
|------------|-------------|
| `recent [--limit N]` | Latest invocations (default 20): timestamp, branch, command path, exit code |
| `stats [prefix]` | Counts by command path (optional prefix filter) |
| `cleanup --days N` | Delete rows older than N days |

Uses `--db` / `JAN_DB` / the default XDG path. Errors if the database file does not exist.