Utility Commands
The agent commands (ai:code, ai:run, ai:fix, ai:review, ai:respond, ai:explain, ai:test, ai:onboard, ai:upgrade, ai:eval) each have their own page under The Agents. This page covers the supporting tackle:* commands.
tackle:init
Generates a starter TACKLE.md by scanning your project (composer.json, test framework, Pint/Larastan presence, app/ structure):
php artisan tackle:init
php artisan tackle:init --force # overwrite an existing filetackle:map
Shows the application map — what the agent sees when it looks at your Eloquent layer. Reads the live connection and the booted application, so it is authoritative where a model file and its migrations are not.
php artisan tackle:map # the index: every model and its table
php artisan tackle:map Post # one model, in full
php artisan tackle:map --all # every model, in full
php artisan tackle:map --route=posts.update # one route: middleware, rules, authorization
php artisan tackle:map --plain # exactly what the agent sees, uncoloured
php artisan tackle:map --fresh # discard the cached map and rebuildUseful for warming the cache in CI, and for seeing exactly what your agent sees before you blame it for a wrong column name.
tackle:health
Verifies that the package is correctly set up. Run it after installation or when something isn't working as expected.
php artisan tackle:health
php artisan tackle:health --probe-providerThe optional provider probe makes one minimal live model request. Use it on the deployed server to verify that the configured provider accepts the loaded key and URL; the default health check only verifies that a key is present.
It checks:
config/tackle.phpandconfig/ai.phpare published- An API key is configured for the active provider
- With
--probe-provider, the provider accepts a live request - The project is a git repository with at least one commit
.env.testingexists (warns if missing)- If healing is enabled: migration has been run, GitHub token is available
- Integration status for GitHub and Sentry
tackle:install
One-command installers for the optional pieces:
php artisan tackle:install remote # composer-require Tackle Remote (--no-dev to add to require)
php artisan tackle:install review # scaffold .github/workflows/tackle-review.yml
php artisan tackle:install eval-ci # scaffold nightly ai:eval workflow
php artisan tackle:install codex # composer-require Tackle Codex (--no-dev to add to require)
php artisan tackle:install grok # composer-require Tackle Grok (--no-dev to add to require)
php artisan tackle:install grokbot # install webhooks and run setup (--no-dev for production dependency)
php artisan tackle:install guard # print the guard-pack hook entries to add to configtackle:prune
If a session is interrupted before cleanup (e.g. a crash or kill -9), worktrees may be left behind in /tmp. Use tackle:prune to remove them:
php artisan tackle:prune
# Preview without removing
php artisan tackle:prune --dry-runOnly directories matching the tackle-worktree-* pattern are touched — the command will never remove your main working tree.
tackle:replay
Re-dispatches a previous healing attempt — useful when you want to retry after adjusting config or fixing something manually.
# Replay the most recent healing attempt
php artisan tackle:replay
# Replay the last attempt for a specific job class
php artisan tackle:replay --class="App\Jobs\ProcessPayment"
# Replay a specific log entry by ID
php artisan tackle:replay --id=42tackle:healing-log
Shows the self-healing audit log:
php artisan tackle:healing-log
php artisan tackle:healing-log --type=job
php artisan tackle:healing-log --type=scheduled_task
php artisan tackle:healing-log --outcome=patched
php artisan tackle:healing-log --outcome=pr_opened
php artisan tackle:healing-log --limit=50tackle:mcp
Serves Tackle's tools over the Model Context Protocol — see MCP Server.
tackle:remote
Serves the mobile browser UI (requires the Tackle Remote package).
tackle:telegram
Runs a coding session driven from Telegram — outbound-only, so it works from anywhere without your machine being reachable. Requires the Tackle Telegram package.
php artisan tackle:telegram # start a session
php artisan tackle:telegram --pair # find the chat id and write it to .env
php artisan tackle:telegram --if-configured # idle instead of failing, for a dev scripttackle:slack
Runs a coding session driven from Slack — over Socket Mode, so it is outbound-only and works from anywhere without your machine being reachable. Requires the Tackle Slack package.
php artisan tackle:slack # start a session
php artisan tackle:slack --pair # find your user and channel ids and write them to .env
php artisan tackle:slack --session=billing # a separate conversation
php artisan tackle:slack --if-configured # idle instead of failing, for a dev scripttackle:eval
Scaffolds a new ai:eval case into your project's evals/ directory (a tackle: generator, like tackle:tool/tackle:agent — it writes a file, it does not run the agent):
php artisan tackle:eval "refund rounding" # writes evals/refund-rounding.phptackle:tool / tackle:agent
Generators for custom tools and agents:
php artisan tackle:tool MyTool
php artisan tackle:agent MyAgent
php artisan tackle:agent MyAgent --full
php artisan vendor:publish --tag="tackle-stubs" # customise the stubsGrokbot package commands
Run php artisan tackle:install grokbot with Tackle 1.56.9+ to install Tackle Grokbot and run its setup. Use --no-dev for a production dependency and --no-interaction --force for unattended production migrations. The following commands are available after package installation. Requires Tackle ^1.56.8; grokbot:install requires Grokbot ^0.1.1.
| Command | Purpose |
|---|---|
grokbot:install | Run only Grokbot's migrations and offer first-bot registration. Safe to rerun. |
grokbot:register | Add a named webhook, instructions, hidden bearer token, and enabled status. No bot count limit. |
grokbot:edit | Select a bot to edit, disable, or rotate credentials. |
grokbot:remove | Confirm removal, erase credentials, and retain delivery history. |
grokbot:history --bot=1 --page=1 | Show 25 deliveries per page, including removed bots. Omit --bot for all bots. |
Use grokbot:install --no-interaction for unattended setup; production also requires --force. Unattended setup skips registration. Tokens are entered through hidden interactive prompts, never command arguments.