NAME

App::karr::Cmd::Config - View or modify board configuration

VERSION

version 0.500

SYNOPSIS

karr config
karr config get claim_timeout
karr config set board.name "New Board Name"
karr config show --defaults
karr config --json

DESCRIPTION

Reads and updates the board configuration stored canonically in refs/karr/config. The command supports whole-config display, individual key lookup, and writes to a small set of explicitly writable keys. Internally it works on the temporary materialized YAML view generated for the command run.

show and get answer for this repository's board and refuse when there is none, the way every other read command does ("require_local_board" in App::karr::Role::BoardDiscovery). They used to fall back to the code defaults instead, and the fallback was silent: in a fresh clone -- where git clone has fetched none of refs/karr/* and the board is sitting on the remote -- karr config get board.name answered Kanban Board, karr's placeholder, for a board that has a name (#136).

Those defaults are still worth printing; they were just answering a different question. --defaults asks it explicitly, so a caller can always tell the board's value from the value karr would use if you made one:

karr config show                # this board's config, or exit 1 if none
karr config show --defaults     # what a board created here would start with

OPTIONS

  • --defaults

    Print "default_config" in App::karr::Config instead of the board's config, for show and get alike. Reads no board and needs no Git repository at all, so it answers the same anywhere -- which is what makes it honest where the fallback was not. Rejected on set, which has nothing to write to.

    Because it renders identically to a board read, diff <(karr config show) <(karr config show --defaults) is exactly the set of keys this board overrides.

  • --json

    Machine-readable rendering of whichever of the two the command answered. show prints the config as one object keyed by config key; get KEY prints that same object restricted to the one key asked for -- always wrapped, so the requested key is in the payload whatever its value is:

    karr config get claim_timeout --json    # {"claim_timeout":"1h"}
    karr config get board --json            # {"board":{"name":"..."}}
    karr config get statuses --json         # {"statuses":["backlog", ...]}

    Through 0.402 only scalars were wrapped and lists and mappings were printed bare, which left get board answering {"name":"..."} -- byte-identical to the wrapped form of a scalar key called name, and no key in the payload to tell them apart (#131). Consumers that read the bare list or mapping must now index the requested key first; a scalar read is unchanged.

WRITABLE KEYS

  • board.name, board.description

    Human-facing board metadata.

  • defaults.status, defaults.priority, defaults.class

    Default values applied by App::karr::Cmd::Create.

  • claim_timeout

    Claim expiry duration in Nh or Nm format.

  • lock_timeout

    How long a karr pick lock ref may be held before another agent may break it, in Nh, Nm, or Ns format. This is not claim_timeout: a claim covers a work session, a lock covers one pick. Defaults to 5m; 0s disables expiry, leaving App::karr::Cmd::Unlock as the only way to clear a stale lock.

  • foundation.enabled, foundation.reason

    Board-level switch for automated agent runs (App::karr::Foundation) and the free-text reason recorded with it. foundation.enabled takes a boolean word (true/false, yes/no, on/off, 1/0) and is the same state App::karr::Cmd::Disable and App::karr::Cmd::Enable write.

SEE ALSO

karr, App::karr, App::karr::Cmd::Init, App::karr::Cmd::Create, App::karr::Cmd::Context, App::karr::Config

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.