NAME
App::karr - Kanban Assignment & Responsibility Registry
VERSION
version 0.400
SYNOPSIS
karr init --name "My Project"
karr create "Fix login bug" --priority high
karr list --status todo,in-progress
karr board
karr set-refs superpowers/spec/1234.md draft ready
karr get-refs superpowers/spec/1234.md
DESCRIPTION
App::karr is the central module behind the karr command line client. The distribution manages a Git-native kanban board stored in refs/karr/*, where task cards are Markdown payloads and board configuration is sparse YAML kept in refs rather than in checked-in work tree files.
The distribution is intended for repositories that want Git to remain the transport and source of truth. Commands materialize a temporary board view only for the lifetime of a command, then serialize changes back into refs and push them onward. This keeps the repository free of a persistent karr/ board tree and avoids ordinary file-level merge conflicts for shared task state.
This module gives the architectural overview. If you want day-to-day command usage, command groups, and command-by-command navigation, start with karr.
ARCHITECTURE
refs/karr/configSparse board configuration overrides layered onto code defaults from App::karr::Config.
refs/karr/meta/next-idDedicated metadata ref for numeric id allocation.
refs/karr/tasks/*/dataTask payloads stored in the same Markdown plus YAML frontmatter shape used by App::karr::Task.
refs/karr/log/*Append-style activity log entries written as per-agent JSON lines.
App::karr::Git provides the low-level Git ref operations, while App::karr::BoardStore handles the higher-level board model: merged config, task loading, materialization, serialization, snapshots, and restore.
CLI ENTRY POINT
The installed executable is karr. Running karr without a subcommand shows the board summary by default, and the command-specific modules under App::karr::Cmd::* implement the individual operations.
Use karr when you want to learn:
which command to run for a task
how backup, restore, destroy, and helper refs fit together
which module implements each subcommand
how to use the Docker-wrapped CLI day to day
DOCKER RUNTIME
Perl installation remains the normal development path, but Docker is a first-class runtime option for vendoring karr into other repositories or tooling environments.
The default raudssus/karr:latest image starts as root only long enough to inspect the mounted /work directory and then drops to the matching numeric uid and gid before running karr. This prevents root-owned project files when the image is used through a shell alias. The companion raudssus/karr:user image is the fixed-user variant for environments that prefer a predictable non-root runtime without that auto-adjustment.
See karr and README.md for the shell alias form and operator-focused examples.
PROGRAMMATIC USAGE
Although the distribution is centered on the CLI, the lower-level modules are usable from Perl when you want to inspect or manipulate board refs directly.
Reading the current board state:
use App::karr::Git;
use App::karr::BoardStore;
my $git = App::karr::Git->new(dir => '.');
my $store = App::karr::BoardStore->new(git => $git);
my $config = $store->load_config;
my @tasks = $store->load_tasks;
Creating a task and writing it back:
use App::karr::Task;
my $id = $store->allocate_next_id;
my $task = App::karr::Task->new(
id => $id,
title => 'Document the release process',
status => 'backlog',
priority => 'high',
);
$store->save_task($task);
$git->push;
Taking a full board snapshot for export logic:
my $snapshot = $store->snapshot;
These modules are more appropriate for Perl automation than instantiating App::karr itself, which mainly exists as the MooX::Cmd dispatcher for the CLI.
BOARD DISCOVERY
Most commands automatically search upward from the current directory for a Git repository that contains refs/karr/*. The --dir option overrides the starting directory used for that repository discovery and is accepted in either position: before the subcommand (karr --dir PATH list) or on the subcommand itself (karr list --dir PATH). Both forms behave identically. The upward walk still applies from the given path, so --dir names any directory inside the target repository, not necessarily its root. If no Git repository is found from the given path, the command fails loudly rather than falling back to the current directory.
DEFAULT BEHAVIOUR
Running karr without a subcommand shows the board summary, which makes the tool convenient as a quick project status command.
SEE ALSO
karr, App::karr::Git, App::karr::BoardStore, App::karr::Task, App::karr::Config, App::karr::Cmd::Init, App::karr::Cmd::Skill
SUPPORT
Issues
Please report bugs and feature requests on GitHub at https://github.com/Getty/karr/issues.
IRC
Join #langertha on irc.perl.org or message Getty directly.
CONTRIBUTING
Contributions are welcome! Please fork the repository and submit a pull request.
AUTHOR
Torsten Raudssus <getty@cpan.org>
COPYRIGHT AND LICENSE
This software is copyright (c) 2026 by Torsten Raudssus <torsten@raudssus.de> https://raudssus.de/.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.