NAME

Langertha::Raider::CLI::Output - Internal terminal renderer of the raider CLI

VERSION

version 0.504

SYNOPSIS

# Internal to Langertha-Raider -- no API promise.
my $out = Langertha::Raider::CLI::Output->new;

$out->say_meta('history cleared.');
$out->say_error('something failed');
$out->say_agent($result);
$out->config_report($app->explain_config);

DESCRIPTION

Internal module. Its interface may change without notice.

Everything the raider CLI prints for a human goes through here: the blue/yellow palette, the agent/meta/error lines, the raider config explain report and the raider config migrate report. The machine output (--json and friends) is Langertha::Raider::CLI::Machine.

out

Filehandle everything is printed to. Defaults to STDOUT.

color

Whether to emit ANSI colors. Defaults to true when "out" is a terminal; ANSI_COLORS_DISABLED switches them off as well.

c

my $text = $out->c(meta => 'some', ' text');

The text in the palette color meta, title, agent, ... -- plain when "color" is off.

emit

Prints its arguments to "out".

say_agent

One line of agent output, inline `code` highlighted.

say_meta

One line of meta information.

say_error

An error: line.

error_text

my $text = $out->error_text($@);

An exception as one line for the user: without the trailing newline and the Perl source location croak appends, also the form Moose adds for a constructor or accessor.

render_inline_code

Wraps `...` spans in a darker background when colors are on. Triple backticks stay untouched so fenced code blocks keep their own flow.

config_report

Prints a report of "explain_config" in Langertha::Raider::Application: the config file in use and any config file ignored next to it (a legacy .raider.yml beside .raider/config.yml); the home file ~/.raider/config.yml when it is loaded; one line per setting with its value, source, what it was merged with, what it overrides and whether it applies to the engine or to raider; the instructions source (-M, .raider/instructions.md, .raider.md, default) with (bare) under --bare, and any instructions file ignored next to the one in use (a legacy .raider.md beside .raider/instructions.md); the layout mode (ADR 0019) with what decided it and whether the Claude layout is read, and each memory file with its scope and imports; each pack with its state, the kind of place it was found in (project, home, shipped, env) and why it is on or off; the pack directories that were skipped, and why; the perl tools grant; and each mounted tool with its source and effect classes; the permission policy ("permissions_report") (unknown for a tool the built-in table does not know); each skill with its state (listed, or hidden for disable-model-invocation) and root, the shadowed skills and the broken skill files; each agent (ADR 0020) with its root, its tools in raider names (* for all of the caller's), the disallowed ones, the model it would get or why it inherits, its declared skills (marked with the skilletor source of those found there) and those that do not resolve, each with the reason a resolver gives (the agent tool would refuse it), the tool names and frontmatter keys raider does not use, then the shadowed agents and the files in an agent root that are not agents; in the Claude layout the settings -- each file (read, not present, or its error), the permission rule counts and default mode, the names of the env keys (never their values), the hook events with their group counts, the enabled plugins and the keys raider does not use -- and the plugins whose skills are offered; and, when ~/.raider/config.yml has a project_tools, each of its selectors (matched or not, and why) and each tool name with the selectors granting it, the packs requesting it and whether raider knows it -- information only; and, when the home file has stored provider aliases (providers:), each with origin, auth types, credential variable name and whether an internal address is allowed.

permissions_report

$out->permissions_report( $app->permissions->report );

Prints the permission policy ("report" in Langertha::Raider::Permissions): the mode and where it came from, ignored mode names, per kind the number of rules by source (with rules => 1 each rule), the invalid rules and the additional directories. Part of "config_report"; the REPL's /permissions prints it with every rule.

mcp_report

$out->mcp_report( $app->mcp_report );
$out->mcp_report( $app->mcp_report, tools => 1 );   # /mcp

Prints the configured MCP servers (ADR 0029, "mcp_report" in Langertha::Raider::Application): per server its name and status in Claude Code's words (connected, failed, pending approval, rejected, disabled, unsupported, not configured, invalid, configured before the start), scope, transport and source, the reason, the approval and where it came from, warnings, shadowed entries; for a failed server its last stderr lines. With tools each server's tools too. Then the files that could not be read, the timeouts, whether the folder is trusted and where answers are written. Part of "config_report"; the REPL's /mcp prints it with the tools.

migrate_report

$out->migrate_report($plan, dry_run => 1);

Prints what raider config migrate does, from a "plan" in Langertha::Raider::Config::Migrate that was not refused: per legacy file its new file, its backup and whether the content changes -- copied unchanged, without the api_key lines (their line numbers), or rewritten (then the new content follows, it holds no api_key) -- and where an api_key was left out; whether .raider/.gitignore is created; with dry_run that nothing was written. Never prints the value of an api_key.

migrate_done

$out->migrate_done(@results);

One line per step of "apply" in Langertha::Raider::Config::Migrate that was done: migrated FROM -> TO (backup BACKUP). Failed and skipped steps are the caller's to report.

pack_reason

my $text = $out->pack_reason($entry, rule => 1);

Why a pack of "activation_report" in Langertha::Raider::Packs::Collection is on or off: SOURCE: REASON (detected: must file=cpanfile (cpanfile), flag: --no-pack), or the detection outcome of an inactive pack (not matched: ...). With rule the origin of a detection rule is appended ([rule: pack default]).

SEE ALSO

SUPPORT

Issues

Please report bugs and feature requests 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.

https://raudssus.de/