NAME

Langertha::Raider::Packs - Pack discovery, loading, and management for raider personas and power bundles

VERSION

version 0.503

DESCRIPTION

Finds and loads the packs of a workspace (ADR 0012): named bundles of skill text, persona defaults and requested tools that raider stacks onto the mission.

build_packs

my $packs = Langertha::Raider::Packs::build_packs(
    root => '/path/to/project',  # workspace root
    home => '/home/me',          # optional
);

Returns a Langertha::Raider::Packs::Collection of every pack found. A pack is a directory with an optional pack.yml and an optional SKILL.md (without one it contributes no skill text). They are searched in these places; a pack name found in an earlier place hides the same name in a later one, so a bundled pack can be replaced by a project or home pack of its name, not by one from $RAIDER_PACK_DIRS:

1. project: <root>/.raider/packs/<name>/
2. home: ~/.raider/packs/<name>/, ~ being home, else $ENV{HOME}, else the user's home from the password database
3. shipped: the bundled share/packs/
4. env: the directories in $RAIDER_PACK_DIRS (colon separated)

Each pack keeps the kind of place it came from as "origin" in Langertha::Raider::Packs::Pack. When root is the home directory, its .raider/packs/ counts as home.

A pack directory that cannot be loaded (a pack.yml that is not valid YAML or not a mapping, a value of the wrong type) is skipped and listed in "skipped_packs" in Langertha::Raider::Packs::Collection; a pack of the same name further down the search order takes its place. It never stops the start.

Project packs are loaded right away, like the detect: rules of the project's own config: the workspace trust decision of ADR 0004, which is meant to gate both, does not exist yet.

pack.yml knows these keys; others are ignored:

exclusive_group -- the group the pack belongs to, default power. Packs of power stack; of any other group (the bundled personas use persona) only one is active at a time.
enabled_by_default -- true: the pack is on unless something names the packs explicitly (the bundled caveman).
tools -- built-in tool servers the pack requests, today only perl ("requested_tools" in Langertha::Raider::Packs::Collection). A request, not a grant.
detect -- the pack's default detection rule (Langertha::Raider::Detect); detect: in .raider.yml replaces it per pack.

ENVIRONMENT

RAIDER_PACK_DIRS

Colon-separated directories searched for packs after the bundled ones.

HOME

The home whose .raider/packs/ is searched, when no home is passed.

SUPPORT

Issues

Please report bugs and feature requests on GitHub at https://github.com/Getty/langertha-raider/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 <torsten@raudssus.de> https://raudssus.de/

COPYRIGHT AND LICENSE

This software is copyright (c) 2026 by Torsten Raudssus.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.