Changes for version 0.301 - 2026-06-04
- karr-foundation: stream agent output to the terminal when interactive (TTY detected) or --verbose is set. The parent process now reads the child's output through a native pipe and fans it to the log, the terminal, and an in-memory buffer — no external `tee` and no re-reading the log by byte offset. The per-run timeout is `select`-based (robust against Perl's deferred signals) and only fires when max_runtime > 0 (max_runtime: 0 disables it entirely). Output is always appended to .karr.log regardless of TTY.
- karr-foundation is now a multi-board coordinator, not just an agent runner. Agent execution is opt-in: with no agent configured on any board, the default action is a read-only overview of every board (status counts, in-progress/blocked, lock/cooldown state). `--status` forces that overview regardless of configuration.
- karr-foundation: `claude: true` synthesizes the canonical claude invocation so you needn't retype it; `claude_bin`, `claude_max_turns` and `claude_permission_mode` override the parts. The agent instruction is exposed as the `$PROMPT` substitution variable (settable via `prompt` in .karr or `default_prompt` in config), usable in any command template.
- Activity log entries are now keyed by a role-qualified identity (`refs/karr/log/<role>/<email>`, role `user` or `agent`) so a human and an AI sharing one Git config are told apart. The role propagates to nested karr calls via the KARR_ROLE env var (foundation sets `agent`); pre-existing bare-email logs are still read for the `user` role.
- karr show: with no ID shows the single most recently updated task; `--last N` widens that, `--me` shows the task(s) the current identity most recently acted on (via the activity log), and `--agent NAME` shows the task(s) most recently claimed by that agent name.
- karr board: hide the `@claimed_by` badge and claimed-count for tasks in a terminal status (done/archived) — a claim is an active lease, and the history remains in the activity log.
- sync: surface the real libgit2 error on a failed pull/push instead of a meaningless "(exit code $?)" (native libgit2 operations have no shell exit code). New Git `last_error` accessor records the last remote-op exception.
Documentation
Kanban Assignment & Responsibility Registry
Single-shot foundation daemon for periodic karr agent execution
Modules
Kanban Assignment & Responsibility Registry
Activity log writer for karr board operations
Ref-backed board storage for karr
Generate a random two-word agent name
Archive a task (soft-delete)
Export the ref-backed karr board as YAML
Show board summary
View or modify board configuration
Generate board context summary for embedding
Create a new task
Delete a task
Destroy the ref-backed karr board
Modify an existing task
Fetch helper payloads from a Git ref
Hand off a task for review
Initialize a new karr board
List tasks with filtering and sorting
Show activity log
Change a task's status
Atomically find and claim the next available task
Restore the ref-backed karr board from YAML
Store helper payloads in a Git ref
Show full details of a task
Install, check, and update bundled agent skills
Sync karr board with remote
Board configuration management
Single-shot foundation daemon — periodic agent execution across karr boards
Git operations for karr sync (all-native via Git::Native + libgit2)
Lock management via Git refs
Role providing board discovery, sync lifecycle, and task access
Role providing minimal board discovery and config access
Shared claim timeout logic
Role providing common output format options
Role providing sync lifecycle with retry and guard insurance
Push guard with automatic retry on scope exit
Task object representing a single kanban card