Skip to content

Sponsor

Built-in Tools

These tools are available to the agent in every session.

Filesystem

ToolWhat it does
ReadFileReads a file's contents. Always runs through PathGuard first.
GlobLists files matching a pattern. Protected paths are excluded from results.
SearchCodeGrep-style search returning file + line + snippet. Capped at 50 results.
EditFilestr_replace edit — old_str must appear exactly once or the edit is refused.
WriteFileCreates a new file. Refuses if the path already exists.

Execution

ToolWhat it does
RunArtisanRuns php artisan <command> in a subprocess. Allowlist-gated.
RunTestsRuns Pest or php artisan test in a subprocess. Returns a structured summary — pass/fail counts and, per failure, the test name, file:line, and assertion — not the raw log.
RunPintRuns Laravel Pint to format files. Called before finishing a task.
RunLarastanRuns PHPStan / Larastan static analysis and returns the findings. Accepts an optional path and level override. No-ops gracefully if vendor/bin/phpstan is not present.
RunShellGeneral shell — governed by the shell config mode.
RunComposerComposer with the dangerous parts fenced off — a fixed set of read-only and mutating subcommands, mutations always --no-scripts, scripts re-enabled only by a human at the terminal. Used by ai:upgrade.
ReadPackageDocsReads an installed package's upgrade guide, changelog, or composer.json from vendor/ — a docs-only carve-out of the vendor/* protected path; package code stays unreadable. Used by ai:upgrade.

Observability

ToolWhat it does
ReadLogReturns the last N lines of storage/logs/laravel.log. Accepts an optional filter string.
QueryDatabaseRuns a read-only SELECT query and returns results as JSON. Capped at 100 rows.
MutateDatabaseOne UPDATE, INSERT, or DELETE, run inside a transaction that is only committed once a human has confirmed the exact affected-row count. Off by default — see Database writes.
ListRoutesReturns a formatted table of all registered routes with method, URI, name, and action.
DescribeSchemaReal DB schema from the live connection — tables, columns, types, indexes, foreign keys. Authoritative, not guessed from migrations.
DescribeModelsThe application map for one model — real columns and types from the live connection, casts, fillable, relations (type, related model, foreign key), local and global scopes, accessors, observers, policy, and factory states. With no argument, lists every model. Schema only, never rows.
DescribeRouteOne route as the framework resolved it — the middleware stack with groups and aliases expanded, route-model bindings, the FormRequest and its validation rules, and the authorization guarding it. ListRoutes answers what exists; this answers what happens.
AppInfoThe application stack — Laravel/PHP versions, drivers (via artisan about), and notable installed packages (Livewire/Inertia/Filament, Pest/PHPUnit, Fortify, …).
GitDiffShows a git diff — supports staged, a specific commit, a branch range, or a path.
ReadTelescopeEntryReads Telescope exception entries. Pass a job UUID for a specific lookup, or omit to return recent exceptions. No-ops gracefully if Telescope is not installed.
ReadSentryIssueFetches a Sentry issue by ID — exception, stacktrace, breadcrumbs, and request context. Omit the ID to list recent unresolved issues for the configured project. No-ops gracefully if SENTRY_AUTH_TOKEN / SENTRY_ORG are not set.
ReadGitHubIssueFetches a GitHub issue by number — title, body, labels, and all comments. Omit the number to list recent open issues. No-ops gracefully if GITHUB_TOKEN / GITHUB_REPO are not set.
ReadPullRequestFetches a GitHub pull request by number — title, body, branch name (head ref), base branch, state, author, and comments. Use this (not ReadGitHubIssue) when the user references a PR number, especially when the branch name is needed for CommitAndPush.
CreateGitHubIssueOpens a new GitHub issue with a title and body.
CreatePullRequestCreates a branch, commits all worktree changes, pushes to origin, and opens a GitHub pull request.
CommitAndPushStages all changes, fetches the remote branch tip, rebases onto it, commits, and pushes via HEAD:<branch> — without checking out the branch. Use this to add follow-up commits to an existing PR from a worktree session. Always pass the branch parameter (get it from ReadPullRequest).
AskUserPresents the user with a select() or multiselect() prompt and returns their choice. The agent calls this when there are multiple valid paths and it wants the user to decide.
ConfirmActionPresents the user with a confirm() prompt before a destructive or irreversible operation. Returns "confirmed" or "cancelled".
DelegateRuns a self-contained task in a subagent — a separate agent with its own fresh context and narrower toolset — and returns only its final report. Present only when tackle.subagents is non-empty.

All file reads happen in-process. Everything that executes code runs as a subprocess, so a broken generated file cannot crash the agent session.

DescribeSchema, DescribeModels, and DescribeRoute are the tools an agent running outside your application cannot have — see The Application Map for what they return and why it beats reading the files.

Want to add your own? See Custom Tools.

Released under the MIT License.