NAME
Langertha::Raider::ToolNames - Internal table of Claude Code tool names and the raider tools they stand for
VERSION
version 0.504
DESCRIPTION
Internal module. Its interface may change without notice.
One place that says which raider tool a Claude Code tool name means. The Claude-mode surfaces use it wherever a Claude Code name reaches raider: an agent file's tools: and disallowedTools: list, a permission rule such as Bash(npm run test:*), a hook matcher, a Claude Code session converted into a scenario.
Read -> read_file Write -> write_file
Edit -> edit_file MultiEdit -> multi_edit
Bash -> bash TaskOutput, BashOutput -> bash_output
TaskStop, KillShell, KillBash -> kill_shell
Glob -> glob Grep -> grep
LS -> list_files WebFetch -> web_fetch
WebSearch -> web_search Skill -> skill
TodoWrite -> todo_write TaskCreate -> task_create
TaskUpdate -> task_update TaskList -> task_list
TaskGet -> task_get Task, Agent -> agent
AskUserQuestion -> ask_user EnterPlanMode -> enter_plan_mode
ExitPlanMode -> exit_plan_mode
SendMessage -> send_message
Monitor -> monitor CronCreate -> cron_create
CronDelete -> cron_delete CronList -> cron_list
EnterWorktree -> enter_worktree
ExitWorktree -> exit_worktree
A name mcp__server__tool is an MCP tool and passes through unchanged: raider addresses MCP tools the same way. Any other name is unknown -- "raider_name" returns undef; the table never guesses. ADR 0025 lists every Claude Code tool name known and why those without a raider tool have none (NotebookEdit, ToolSearch, ...). Monitor, CronCreate, CronDelete and CronList mean the tools of the same names since ADR 0031; ScheduleWakeup stays unmapped. SendMessage means send_message since ADR 0027, EnterWorktree and ExitWorktree mean enter_worktree and exit_worktree since ADR 0032.
The table names the raider tool a Claude Code tool stands for; it does not say that the tool is mounted in a run. raider mounts one task-list family at a time, as Claude Code offers one (Langertha::Raider::TodoTools): task_create, task_update, task_list and task_get by default, todo_write instead with RAIDER_ENABLE_TASKS=0.
Some raider tools have more than one Claude Code name: Task and Agent mean agent; TaskStop, KillShell and KillBash (the names Claude Code has given the tool that stops a background shell) mean kill_shell; TaskOutput and the older BashOutput mean bash_output. The way back ("claude_name") answers with the current name: Agent, TaskStop, TaskOutput. LS, BashOutput and TaskOutput are gone from current Claude Code; they stay for older sessions and agent files.
Arguments
The tools also name some arguments differently. "claude_input" turns a raider tool's arguments into the Claude Code tool's (what a hook gets as tool_input), "raider_input" goes the way back (a hook's updatedInput):
read_file, write_file, edit_file, multi_edit path <-> file_path
kill_shell shell_id <-> task_id
bash timeout: seconds <-> milliseconds
bash_output bash_id <-> task_id,
timeout: seconds <-> milliseconds,
block: false <-> true when not given
kill_shell answers to TaskStop's task_id and to the shell_id of KillShell and KillBash (which TaskStop still takes, deprecated): the way back turns task_id into shell_id and lets shell_id through.
bash_output goes out as TaskOutput (task_id, block, timeout in milliseconds). TaskOutput waits for the command by default and raider's bash_output does not, so a block left out is written down: false on the way to Claude Code, true on the way back from a TaskOutput input. An input with bash_id and no task_id is the older BashOutput (bash_id, filter) and passes unchanged.
Every other key passes through unchanged under its own name, in both directions: raider's tools took Claude Code's names where they have the same argument (content, old_string, new_string, edits, pattern, glob, output_mode, -i, command, bash_id, filter, url, query, todos, subject, description, activeForm, taskId, status, addBlocks, addBlockedBy, owner, metadata, skill, args, prompt, subagent_type, plan, ...). Keys only one side knows (offset of Read, description of Bash, as_html of web_fetch, working_directory of bash) pass through too; the receiving tool decides what to do with them.
ask_user is the one tool whose arguments have another shape, not other names (question and a list of options strings, against AskUserQuestion's questions list of objects). There is no lossless mapping, so its arguments pass through unchanged.
The round trip is lossless: raider_input( $t, claude_input( $t, $args ) ) is $args again, and the other way round, as long as an input does not carry both names of one argument (path and file_path): then the translated key wins and the other is dropped. The bash timeout is lossless from raider (whole seconds) and back; milliseconds that are not whole seconds become the next whole second, as raider's bash takes integers; the same for the timeout of bash_output. A bash_output input without block comes back with block false, which is what it meant.
is_mcp
Langertha::Raider::ToolNames->is_mcp('mcp__github__create_issue'); # true
True for a name of the form mcp__server__tool.
raider_name
my $name = Langertha::Raider::ToolNames->raider_name('Read'); # 'read_file'
The raider tool for a Claude Code tool name, an mcp__* name unchanged, or undef for a name that is in neither.
claude_name
my $name = Langertha::Raider::ToolNames->claude_name('read_file'); # 'Read'
The Claude Code name of a raider tool, an mcp__* name unchanged, or undef for a tool the table does not know.
claude_names
All Claude Code names of the table (not the MCP pass-through), sorted.
raider_names
All raider tool names of the table, sorted, each once.
claude_input
my $in = Langertha::Raider::ToolNames->claude_input( read_file => { path => 'lib/A.pm' } );
# { file_path => 'lib/A.pm' }
The arguments of a raider tool (named first, by its raider name) in the form the Claude Code tool takes. A new hash ref; the input is not changed. An unknown tool or an mcp__* tool gets a plain copy. Croaks without a tool name or when the arguments are not a hash ref.
raider_input
my $in = Langertha::Raider::ToolNames->raider_input(
edit_file => { file_path => '/abs/A.pm', old_string => 'a', new_string => 'b' },
);
# { path => '/abs/A.pm', old_string => 'a', new_string => 'b' }
The way back: arguments in the Claude Code form, for the raider tool named first. Same rules as "claude_input".
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.