App-karr
view release on metacpan or search on metacpan
ex/README.md view on Meta::CPAN
reported, but the command still exits `0` â a machine that has four of six
repositories of a fleet has an honest report to give about the four, and
aborting at the first unresolvable name would give none at all.
### The activity log
Every writing operation leaves a line in `refs/karr/log/<role>/<email>`. The
key is role-qualified â role `user` or `agent` â so that a human and an AI
sharing a Git configuration stay separate. That isn't cosmetics:
`karr-foundation` sets `KARR_ROLE=agent` for agent runs and `KARR_ROLE=hook` for
the domain hook, and exactly by that it later recognizes whether an agent has
touched a card (see "Stall" in section 4).
```bash
karr log # die 20 jüngsten Einträge
karr log --agent agent-fox # was dieser Claim-Name getan hat
karr log --task 12 --last 50 # was mit dieser Karte passiert ist
```
### `context` and `metrics`
`karr context` builds a concise board summary for embedding into agent context
files like `AGENTS.md`. Sections are `in-progress`, `blocked`, `overdue`,
`recently-completed` and `activity`, selectable via `--sections`. `--write-to
FILE` replaces the content between the sentinels `BEGIN kanban-md context` and
`END kanban-md context`, or appends the block when the sentinels are missing.
A detail that reveals the intent: the `activity` section shows **only the
entries of other identities**, bounded by `--activity-limit` (default 5). An
agent reading its own briefing already knows what it has done itself â that's
what `karr show --me` is for. What belongs in a briefing is what everyone
*else* has done.
`karr metrics` reports flow metrics, exclusively from the lifecycle stamps
`created`, `started` and `completed`: throughput over 7 and 30 days (fixed
windows, like in `kanban-md`, so both tools mean the same thing), mean lead time
(`completed - created`), mean cycle time (`completed - started`), flow
efficiency and the cards running too long (started, not terminal, no
completion, oldest first). Archived cards never count.
Two details that put honesty before polish. Lead time is **never capped**: a
board with day-granular stamps can produce negative samples, and how many there
are is reported alongside as `negative_lead_samples`, instead of silently
pulling them to zero. And flow efficiency is computed over the cards that
contributed to *both* means, and over their own lead time â that's the one
deliberate deviation from `kanban-md`, which divides the mean cycle time by the
mean lead time, even when the two means were formed over different populations.
Where every finished card has a usable start, the same comes out; where not,
`kanban-md`'s definition can report an efficiency above 100%, and that describes
nothing.
### Board administration
```bash
karr config # zusammengeführte Einstellungen ansehen
karr config get foundation.enabled
karr config set foundation.enabled false
karr config --defaults # die eingebauten Vorgaben statt dieses Boards
karr sync # refs/karr/* explizit holen und pushen
karr backup > karr-backup.yml # ganzes Board als YAML
karr restore --yes < karr-backup.yml
karr destroy --yes
```
`karr sync` synchronizes `refs/karr/*` with the remote â without flags first
fetch, then push, plus one delete refspec for each ref that this clone has
deleted and not yet published (read off the tombstones under
`refs/karr-local/deleted/`). The push does **no prune**: a remote ref this clone
has never seen is another agent's card and not leftover â pruning it is the way
a card has actually been lost once.
After that, the same command does the same for `refs/karr-foundation/*`, the
shared namespace of `karr-foundation` (chain, run logs, questions mailbox). One
command for both, because a second one would be a second thing you could forget
â and the forgetting would be silent. The board half runs first, and the fleet
half never alone: the board identity and wipe refusals are what protects the
fleet refs against a swapped remote, because this namespace has none of its own.
`restore` is deliberately destructive â it first deletes the current
`refs/karr/*` and then plays in the snapshot. `destroy` removes the board
completely. If a remote exists, both also prune there.
### Helper refs
Not every shared state is a card. `karr set-refs` and `karr get-refs` put
arbitrary payloads into refs outside of `refs/karr/*`:
```bash
karr set-refs superpowers/spec/1234.md draft ready
karr set-refs superpowers/spec/1234.md < design.md # mehrzeilig über stdin
karr get-refs superpowers/spec/1234.md
```
The arguments after the ref are joined with a space, so they're a single-line
payload. A document comes via stdin: without a content argument, `karr set-refs
REF < file` stores the file verbatim, and `karr get-refs REF > file` returns it
unchanged. Good for planning blobs, generated specs, agent scratch state,
workflow metadata you want synced through Git without modeling it as a card.
Protected namespaces are locked: branches, tags, remotes, stash, `refs/karr/*`
and `refs/karr-local/*` (where `karr pick` keeps its process-local locks).
`refs/karr-foundation/chain/*`, `.../log/*` and `.../questions/*` are
**read-only** for `set-refs` â those are written by `karr-foundation` with
schema and compare-and-swap â while `get-refs` reads them freely. That's exactly
how you look at a step, a run log or a question.
### Skills
The distribution ships a `karr` skill, installable locally in the repository or
globally in the home directory:
```bash
karr skill install
karr skill install --agent claude-code
karr skill install --agent codex --global --force
karr skill check --global
karr skill update
```
Targets are `claude-code`, `codex` and `cursor`.
( run in 0.444 second using v1.01-cache-2.11-cpan-4ef0a570458 )