Skip to content Docs index for AI agents (llms.txt)
LaRecipe
3.x

Versions

Every larecipe:* command, grouped by job. Each usage block and option table is read from the running app by an <Artisan> live reference, so it matches php artisan help.

Commands that take a docs version use --docs-version: Symfony reserves --version for the application.

Set up and write

larecipe:install

Sets up a doc set with a first page, and the AGENTS.md instructions, skills, MCP config and hooks for the agents it finds. --dry-run previews every step, and every prompt has a flag. See installation.

Command larecipe:install

Install LaRecipe: your docs, and the agent setup that keeps them current

php artisan larecipe:install [--driver [DRIVER]] [--path [PATH]] [--agents [AGENTS]] [--no-hooks] [--git-hook [GIT-HOOK]] [--ci [CI]] [--review [REVIEW]] [--claude-md] [--no-index] [--composer-script] [--onboard [ONBOARD]] [--onboard-agent [ONBOARD-AGENT]] [--dry-run]
Options
OptionDescriptionDefault
--driver=DRIVERrepository (recommended) or database
--path=PATHThe docs folder of a repository setdocs
--agents=AGENTSAgents to set up, comma-separated (claude,codex,cursor,gemini,copilot), or "none" (default: the ones detected)
--no-hooksSkip the pre-push and SessionStart agent hooks
--git-hook=GIT-HOOKAlso install the git pre-push hook: warn or strict
--ci=CIAdd the optional no-AI CI check: fail or comment
--review=REVIEWrequired (default) or auto
--claude-mdAdd @AGENTS.md to CLAUDE.md without asking
--no-indexLeave the docs index out of AGENTS.md
--composer-scriptAdd larecipe:agents to composer post-update-cmd without asking
--onboard=ONBOARDThen write starter docs for these audiences: product,api,package,internal
--onboard-agent=ONBOARD-AGENTThe agent to run onboarding with
--dry-runShow what would change without writing anything

larecipe:onboard

Writes starter docs with your own coding agent and the larecipe-write-docs skill. It shows the agent command and asks before it runs. Nothing is committed. See your first docs.

Command larecipe:onboard

Generate starter docs from your app with your local coding agent

php artisan larecipe:onboard [--audience [AUDIENCE]] [--set [SET]] [--agent [AGENT]] [--print] [--yes]
Options
OptionDescriptionDefault
--audience=AUDIENCEWho the docs are for: product, api, package, internal (comma-separated)
--set=SETThe doc set to write into (default: the default set)
--agent=AGENTclaude, codex, cursor, gemini or copilot (default: the one detected)
--printOnly print the command, do not run it
--yesRun without asking

larecipe:upgrade

Moves a LaRecipe 2 app to LaRecipe 3: config, navigation and content. Without --apply it only writes the report. See upgrade from v2.

Command larecipe:upgrade

Upgrade LaRecipe 2 docs, config and navigation to LaRecipe 3

php artisan larecipe:upgrade [--apply] [--move-to [MOVE-TO]] [--relative-links]
Options
OptionDescriptionDefault
--applyWrite the changes (without it, only the report is written)
--move-to=MOVE-TOMove the docs into this folder, for example docs
--relative-linksAlso turn /docs/VERSION/page links into relative .md links

larecipe:make:page

Creates a page with title, description and sources in its frontmatter. Repository sets only. It does not edit navigation.json; it tells you when the version has one.

Command larecipe:make:page

Create a docs page with title, description and sources

php artisan larecipe:make:page [--title [TITLE]] [--description [DESCRIPTION]] [--source [SOURCE]] [--set [SET]] [--docs-version [DOCS-VERSION]] [--locale [LOCALE]] [--dry-run] [--] <path>
Arguments
ArgumentDescriptionDefault
pathThe page path, for example billing/refunds (required)
Options
OptionDescriptionDefault
--title=TITLEThe page title (default: from the path)
--description=DESCRIPTIONOne sentence about the page
--source=SOURCECode the page documents, for example app/Billing/** (repeatable)
--set=SETThe doc set (default: the default set)
--docs-version=DOCS-VERSIONThe version (default: the default version)
--locale=LOCALEThe locale (default: the default locale)
--dry-runShow what would change without writing anything

larecipe:make:version

Adds a version to a repository set by copying an existing one. On a set without versions, --current-as names the version its current pages belong to. See versions.

Command larecipe:make:version

Add a docs version by copying an existing one

php artisan larecipe:make:version [--from [FROM]] [--default] [--current-as [CURRENT-AS]] [--set [SET]] [--dry-run] [--] <version>
Arguments
ArgumentDescriptionDefault
versionThe new version id, for example 3.x (required)
Options
OptionDescriptionDefault
--from=FROMCopy the pages of this version (default: the default version)
--defaultMake the new version the default
--current-as=CURRENT-ASFor a set without versions yet, the version its current pages belong to
--set=SETThe doc set (default: the default set)
--dry-runShow what would change without writing anything

larecipe:navigation:freeze

Writes the navigation LaRecipe derives from folders and frontmatter to navigation.json, so you can edit it by hand. Repository sets only.

Command larecipe:navigation:freeze

Write the derived navigation to navigation.json

php artisan larecipe:navigation:freeze [--set [SET]] [--docs-version [DOCS-VERSION]] [--locale [LOCALE]] [--dry-run]
Options
OptionDescriptionDefault
--set=SETThe doc set (default: the default set)
--docs-version=DOCS-VERSIONThe version (default: the default version)
--locale=LOCALEThe locale (default: the default locale)
--dry-runShow what would change without writing anything

Keep current

larecipe:affected

Lists the pages whose sources: match the files a change touched, and which of them it left stale. The pre-push hook and the CI check run it. See how it works for ranges and formats.

Command larecipe:affected

List the docs pages a change affects and the ones it left stale

php artisan larecipe:affected [--base [BASE]] [--head [HEAD]] [--uncommitted] [--set [SET]] [--docs-version [DOCS-VERSION]] [--locale [LOCALE]] [--format [FORMAT]] [--fail-on-stale] [--no-drift]
Options
OptionDescriptionDefault
--base=BASECompare with this branch or commit (from where the branch left it)
--head=HEADThe end of the rangeHEAD
--uncommittedInclude staged, unstaged and untracked changes
--set=SETOnly this doc set
--docs-version=DOCS-VERSIONA version id, or "all" (default: each set's default version)
--locale=LOCALECheck this locale's translations against their source pages
--format=FORMATtext, json, github or markdowntext
--fail-on-staleExit with 1 when the change leaves pages stale
--no-driftSkip pages that drifted before this change

larecipe:sources:suggest

Proposes sources: for pages that declare none, from the classes, commands and routes they mention. --apply writes them into those pages.

Command larecipe:sources:suggest

Suggest sources: for docs pages from the code they mention

php artisan larecipe:sources:suggest [--set [SET]] [--page [PAGE]] [--all] [--apply] [--dry-run] [--json]
Options
OptionDescriptionDefault
--set=SETOnly this doc set
--page=PAGEOnly this page path
--allAlso suggest for pages that already declare sources
--applyAdd the suggestions to pages that declare no sources yet
--dry-runWith --apply, show what would change without writing
--jsonPrint the suggestions as JSON

larecipe:validate

Checks links, navigation, schemas, components, snippets, live references, budgets and skills. Exits non-zero on an error; --json prints the report agents read. See validation.

Command larecipe:validate

Check the docs: links, navigation, schemas, components, snippets, budgets and skills

php artisan larecipe:validate [--set [SET]] [--docs-version [DOCS-VERSION]] [--json]
Options
OptionDescriptionDefault
--set=SETOnly this doc set
--docs-version=DOCS-VERSIONOnly this version of the set (Symfony reserves --version)
--jsonPrint the report as JSON

larecipe:hook

Called by the agent hooks (pre-push, session-start) and the git hook (git-pre-push). You do not run it by hand.

Command larecipe:hook

Run LaRecipe's docs check for an agent hook or the git pre-push hook

php artisan larecipe:hook [--client [CLIENT]] [--strict] [--payload [PAYLOAD]] [--] <event>
Arguments
ArgumentDescriptionDefault
eventpre-push, session-start or git-pre-push (required)
Options
OptionDescriptionDefault
--client=CLIENTThe agent calling: claude or codexclaude
--strictFor git-pre-push, block the push when pages are stale
--payload=PAYLOADThe hook payload as JSON (default: read from stdin)

larecipe:hooks:git

Installs or removes the git pre-push check, for people who push without an agent. It warns by default; --strict holds the push. It never replaces an existing hook.

Command larecipe:hooks:git

Install or remove the git pre-push docs check

php artisan larecipe:hooks:git [--install] [--uninstall] [--strict] [--dry-run]
Options
OptionDescriptionDefault
--installAdd the LaRecipe check to the pre-push hook
--uninstallRemove the LaRecipe check from the pre-push hook
--strictBlock pushes that leave docs pages stale (default: warn only)
--dry-runShow what would change without writing anything

larecipe:sync

Runs a docs agent inside your app on your own laravel/ai provider key: for the pages a change left stale, the pages you name, or the whole set with --audit. It shows its plan and asks first. See larecipe:sync.

Command larecipe:sync

Update the docs with an AI agent on your own provider key (on demand, never in CI)

php artisan larecipe:sync [--base [BASE]] [--head [HEAD]] [--page [PAGE]] [--audit] [--set [SET]] [--docs-version [DOCS-VERSION]] [--locale [LOCALE]] [--dry-run] [--max-pages [MAX-PAGES]] [--max-steps [MAX-STEPS]] [--provider [PROVIDER]] [--model [MODEL]] [--remote [REMOTE]] [--commit] [--queue] [--yes]
Options
OptionDescriptionDefault
--base=BASECompare with this branch or commit (default: the default branch)
--head=HEADThe end of the rangeHEAD
--page=PAGEUpdate this page instead (a path such as guides/webhooks, or its file); repeatable
--auditReview the whole set and fix what matters most
--set=SETThe doc set (default: the default set)
--docs-version=DOCS-VERSIONThe version to work on (default: the set's default version)
--locale=LOCALEThe locale to work on (default: the set's default locale)
--dry-runReport what the agent would change, and write nothing
--max-pages=MAX-PAGESThe most pages this run may change (default: larecipe.ai.sync.max_pages)
--max-steps=MAX-STEPSThe most agent steps this run may take (default: larecipe.ai.sync.max_steps)
--provider=PROVIDERThe laravel/ai provider (default: larecipe.ai.sync.provider, then ai.default)
--model=MODELThe model (default: larecipe.ai.sync.model, then the provider's default)
--remote=REMOTEThe MCP endpoint of a production database set, to change it outside a pull request
--commitCommit the docs change on the current branch
--queueRun as a queued job (visible in Horizon or Nightwatch)
--yesRun without asking

Agents

larecipe:agents

Regenerates the AGENTS.md block, the skills and the compiled hook patterns. Run it after updating LaRecipe or changing its config.

Command larecipe:agents

Regenerate the AGENTS.md block, the LaRecipe skills and the hook patterns

php artisan larecipe:agents [--dry-run] [--no-index] [--package]
Options
OptionDescriptionDefault
--dry-runShow what would change without writing anything
--no-indexLeave the docs index out of the AGENTS.md block
--packageRefresh the canonical skills inside the LaRecipe package (for contributors)

larecipe:agents-md

Writes the docs index into the LaRecipe block of AGENTS.md. Run it after adding, removing or renaming pages.

Command larecipe:agents-md

Write the docs index into the LaRecipe block of AGENTS.md

php artisan larecipe:agents-md [--set [SET]] [--claude-md] [--print] [--dry-run]
Options
OptionDescriptionDefault
--set=SETIndex this doc set (default: the default set)
--claude-mdAlso add @AGENTS.md to CLAUDE.md without asking
--printPrint the block instead of writing it
--dry-runShow what would change without writing anything

larecipe:mcp

Starts the local MCP server over stdio. Your agent's MCP config runs it. See MCP tools.

Command larecipe:mcp

Start the LaRecipe docs MCP server over stdio, for your coding agent

php artisan larecipe:mcp

larecipe:doctor

Grades what agents get from each doc set, with a fix for each finding. Exits non-zero when a check fails. See validation and doctor.

Command larecipe:doctor

Grade how ready your docs are for agents, with fixes

php artisan larecipe:doctor [--set [SET]] [--json]
Options
OptionDescriptionDefault
--set=SETOnly this doc set
--jsonPrint the report as JSON

Sources

larecipe:source:export

Writes a doc set as a bundle of canonical files, to a folder or a .tar.gz, for source:import and pull.

Command larecipe:source:export

Export a doc set as a bundle of canonical files (Markdown, larecipe.json, navigation.json, assets)

php artisan larecipe:source:export [--set [SET]] [--to [TO]]
Options
OptionDescriptionDefault
--set=SETThe doc set (default: larecipe.default)
--to=TOA new directory, or a file ending in .tar.gz

larecipe:source:import

Loads a bundle into a set's configured source, validated first. --verify compares every content hash afterwards.

Command larecipe:source:import

Import a bundle of canonical files into a doc set

php artisan larecipe:source:import [--set [SET]] [--verify] [--] <bundle>
Arguments
ArgumentDescriptionDefault
bundleA bundle directory, or a .tar.gz made by larecipe:source:export (required)
Options
OptionDescriptionDefault
--set=SETThe doc set (default: larecipe.default)
--verifyRe-read the set afterwards and compare every content hash

larecipe:source:move

Copies a set between the repository and the database, and prints the config change that switches serving. It never edits config/larecipe.php. See switching sources.

Command larecipe:source:move

Move a doc set between the repository and the database source

php artisan larecipe:source:move [--set [SET]] [--path [PATH]] [--connection [CONNECTION]] [--dry-run] [--verify] [--] <from> <to>
Arguments
ArgumentDescriptionDefault
fromThe source the set uses now: repository or database (required)
toThe source to move it to: repository or database (required)
Options
OptionDescriptionDefault
--set=SETThe doc set (default: larecipe.default)
--path=PATHThe docs folder on the repository side, when it is not the configured one (default: docs/)
--connection=CONNECTIONThe database connection on the database side
--dry-runShow the plan and the validation, write nothing
--verifyAfter writing, re-read the target and compare every content hash

larecipe:make:docs-migration

Scaffolds a docs migration by hand. Each --page is filled with its current content and content hash. See docs migrations.

Command larecipe:make:docs-migration

Create a docs migration for a database doc set

php artisan larecipe:make:docs-migration [--set [SET]] [--page [PAGE]] [--] <name>
Arguments
ArgumentDescriptionDefault
nameWhat the migration does, for example document_billing_exports (required)
Options
OptionDescriptionDefault
--set=SETThe doc set (default: larecipe.default)
--page=PAGEPages to include with their current content and hash, for example 3.x/billing/exports

larecipe:pull

Refreshes a local or CI database set from a bundle made on production with larecipe:source:export.

Command larecipe:pull

Refresh a local database doc set from a production export

php artisan larecipe:pull [--set [SET]] [--from [FROM]]
Options
OptionDescriptionDefault
--set=SETThe database doc set to refresh (default: larecipe.default)
--from=FROMA bundle made on production with larecipe:source:export (a .tar.gz or a directory)

larecipe:cache:warm

Warms the cache of database sets. Run it in your deploy after php artisan migrate.

Command larecipe:cache:warm

Warm the cache of database doc sets (pages, navigation, manifest)

php artisan larecipe:cache:warm [--set [SET]]
Options
OptionDescriptionDefault
--set=SETThe doc sets to warm (default: every database set)

Operate

larecipe:optimize

Renders every page of repository sets into the cache, with page lists, navigation and search records. php artisan optimize runs it.

Command larecipe:optimize

Compile LaRecipe pages, navigation and search records into the cache

php artisan larecipe:optimize [--set [SET]]
Options
OptionDescriptionDefault
--set=SETOnly compile these doc sets

larecipe:clear

Forgets what larecipe:optimize compiled, and deletes bootstrap/cache/larecipe/optimized.php. The provenance index, the reference snapshot and the hook patterns stay. php artisan optimize:clear runs it.

Command larecipe:clear

Forget the LaRecipe pages and search records compiled by larecipe:optimize

php artisan larecipe:clear

larecipe:provenance

Compiles each page's last change from git, for repository sets. Run it where the full history is; larecipe:optimize does not run it. See the repository source.

Command larecipe:provenance

Compile page provenance (last change, author, agent, pull request) for repository doc sets

php artisan larecipe:provenance [--set [SET]] [--clear]
Options
OptionDescriptionDefault
--set=SETThe doc sets to compile (default: every repository set)
--clearRemove the compiled indexes instead

larecipe:references:snapshot

Writes what live references can read to bootstrap/cache/larecipe/references.json, for CI without a database. Used only when the app cannot answer.

Command larecipe:references:snapshot

Snapshot what live references can read, for CI without a database

php artisan larecipe:references:snapshot

larecipe:export

Writes public doc sets as a static site, search included. What needs the running app is left out and listed. See static export.

Command larecipe:export

Export public doc sets as a static site

php artisan larecipe:export [--out [OUT]] [--set [SET]] [--base-url [BASE-URL]]
Options
OptionDescriptionDefault
--out=OUTThe folder to write the site intobuild/docs
--set=SETThe doc sets to export (all public sets by default)
--base-url=BASE-URLWhere the site will be served from, for example https://docs.acme.dev

larecipe:share

Prints a temporary signed link that lets anyone read one page, private or not. See gate blocks and private docs.

Command larecipe:share

Issue a temporary signed link that lets anyone read one private page

php artisan larecipe:share [--expires [EXPIRES]] [--] <page>
Arguments
ArgumentDescriptionDefault
pageThe page, as set/version/path (for example docs/3.x/billing/roadmap) (required)
Options
OptionDescriptionDefault
--expires=EXPIRESHow long the link works: 30m, 12h, 7d, 2w7d

The UI files

There is no larecipe:publish. To let your web server serve the prebuilt UI files, use Laravel's own command (see deployment):

bash
php artisan vendor:publish --tag=larecipe-assets --force

Newsletter

Stay in the loop

LaRecipe release notes by email. Unsubscribe any time.