Claude-Agent
view release on metacpan or search on metacpan
lib/Claude/Agent.pm view on Meta::CPAN
my $loop = IO::Async::Loop->new;
async sub run_agent {
my ($loop) = @_;
# Pass the loop for proper async integration
my $iter = query(
prompt => "Analyze this codebase",
options => Claude::Agent::Options->new(
allowed_tools => ['Read', 'Glob', 'Grep'],
),
loop => $loop,
);
while (my $msg = await $iter->next_async) {
if ($msg->isa('Claude::Agent::Message::Result')) {
print $msg->result, "\n";
last;
}
}
}
run_agent($loop)->get;
=head1 DESCRIPTION
Claude::Agent is a Perl SDK for the Claude Agent SDK, providing programmatic
access to Claude's agentic capabilities. It allows you to build AI agents
that can read files, run commands, search the web, edit code, and more.
The SDK communicates with the Claude CLI and provides:
=over 4
=item * Streaming message iteration (blocking and async)
=item * Tool permission management
=item * Hook system for intercepting tool calls
=item * MCP (Model Context Protocol) server integration
=item * Subagent support for parallel task execution
=item * Session management (resume, fork)
=item * Structured output support
=back
=head1 EXPORTED FUNCTIONS
=head2 query
my $iter = query(
prompt => $prompt,
options => $options,
loop => $loop, # optional, for async integration
);
Creates a new query and returns an iterator for streaming messages.
=head3 Arguments
=over 4
=item * prompt - The prompt string to send to Claude
=item * options - A L<Claude::Agent::Options> object (optional)
=item * loop - An L<IO::Async::Loop> object (optional, for async integration)
=back
=head3 Returns
A L<Claude::Agent::Query> object that can be iterated to receive messages.
B<Note:> For proper async behavior, pass your application's IO::Async::Loop.
This allows multiple queries to share the same event loop.
=cut
sub query {
my (%args) = @_;
my $prompt = $args{prompt};
Claude::Agent::Error->throw(
message => "query() requires a 'prompt' argument"
) unless defined $prompt && length $prompt;
my $options = $args{options} // Claude::Agent::Options->new();
return Claude::Agent::Query->new(
prompt => $prompt,
options => $options,
($args{loop} ? (loop => $args{loop}) : ()),
);
}
=head2 tool
my $calculator = tool(
'calculate',
'Perform basic arithmetic calculations',
{
type => 'object',
properties => {
a => {
type => 'number',
description => 'First operand',
},
b => {
type => 'number',
description => 'Second operand',
},
operation => {
type => 'string',
enum => ['add', 'subtract', 'multiply', 'divide'],
description => 'The arithmetic operation to perform',
},
( run in 0.756 second using v1.01-cache-2.11-cpan-140bd7fdf52 )