safe-chains 0.166.0

Auto-allow safe bash commands in agentic coding tools
Documentation
[[command]]
name = "artisan"
description = "Laravel's CLI. Every command bootstraps the full application (all service providers boot, which can trigger side effects in third-party packages). Read-only commands (about, route:list, config:show, model:show, event:list, schedule:list, migrate:status, db:show, db:table) display information but some require a live DB connection. tinker is a full PHP REPL with no sandbox. test delegates to pest/phpunit. make:* generates stub files. migrate modifies the database schema. config:clear, route:clear, view:clear, and event:clear delete bootstrap/cache files locally. cache:clear flushes the application cache backend selected by --store (or the default in config/cache.php); some stores write only to the local filesystem (file under storage/framework/cache/data, array per-request memory, null no-op, apc per-process shared memory), while others reach external services (database, redis, memcached, dynamodb). The reach is real but the impact is bounded: cache stores are by definition recreatable, so flushing any of them — local or remote — is a transient performance event rather than data loss. Downstream visibility can still be significant on a busy app: SESSION_DRIVER=cache rotates every session (mass logout); RateLimiter counters reset; Cache::lock()/`once` mutex keys clear (potential duplicate runs of in-flight jobs); warmed Cache::remember() entries cause a cold-start stampede. None of those are unrecoverable. For a local cache:clear to actually reach prod the local Laravel install must be configured with prod's cache-backend coordinates (REDIS_HOST=prod-redis etc.), which is an established anti-pattern in Laravel dev. serve starts a local HTTP server. invoke-serialized-closure executes arbitrary serialized PHP closures. One major release per year; new artisan commands appear in each."
url = "https://laravel.com/docs/12.x/artisan"
bare_flags = ["--help", "--version", "-V", "-h"]

[[command.sub]]
name = "about"
standalone = ["--help", "--json", "-h"]
valued = ["--only"]

[[command.sub]]
name = "list"
standalone = ["--help", "--raw", "-h"]
valued = ["--format"]

[[command.sub]]
name = "help"
positional_style = true
standalone = ["--help", "-h"]

[[command.sub]]
name = "env"
standalone = ["--help", "-h"]

[[command.sub]]
name = "inspire"
standalone = ["--help", "-h"]

[[command.sub]]
name = "completion"
positional_style = true
standalone = ["--help", "-h"]

[[command.sub]]
name = "config:show"
positional_style = true
standalone = ["--help", "-h"]

[[command.sub]]
name = "route:list"
standalone = [
    "--except-vendor", "--help", "--json",
    "--only-vendor", "--reverse",
    "-h", "-r", "-v",
]
valued = [
    "--action", "--domain", "--except-path",
    "--method", "--name", "--path", "--sort",
]

[[command.sub]]
name = "model:show"
bare = false
standalone = ["--help", "--json", "-h"]

[[command.sub]]
name = "event:list"
standalone = ["--help", "-h"]

[[command.sub]]
name = "schedule:list"
standalone = ["--help", "--json", "--next", "-h"]
valued = ["--timezone"]

[[command.sub]]
name = "channel:list"
standalone = ["--help", "-h"]

[[command.sub]]
name = "migrate:status"
standalone = ["--help", "--realpath", "-h"]
valued = ["--database", "--path"]

[[command.sub]]
name = "db:show"
standalone = ["--counts", "--help", "--json", "--views", "-h"]
valued = ["--database"]

[[command.sub]]
name = "db:table"
bare = false
standalone = ["--help", "--json", "-h"]
valued = ["--database"]

[[command.sub]]
name = "queue:failed"
standalone = ["--help", "-h"]
valued = ["--queue"]

[[command.sub]]
name = "view:clear"
level = "SafeWrite"
standalone = ["--help", "-h"]

[[command.sub]]
name = "config:clear"
level = "SafeWrite"
standalone = ["--help", "-h"]

[[command.sub]]
name = "route:clear"
level = "SafeWrite"
standalone = ["--help", "-h"]

[[command.sub]]
name = "event:clear"
level = "SafeWrite"
standalone = ["--help", "-h"]

[[command.sub]]
name = "test"
level = "SafeRead"
standalone = [
    "--bail", "--compact",
    "--coverage", "--debug", "--dirty",
    "--help", "--no-coverage", "--no-progress",
    "--parallel", "--profile", "--retry",
    "--stop-on-failure",
    "-h",
]
valued = [
    "--exclude-filter", "--exclude-group", "--exclude-testsuite",
    "--filter", "--group", "--min", "--processes",
    "--testsuite",
]

[[command.sub]]
name = "cache:clear"
handler = "laravel_cache_clear"
doc_body = "any well-formed invocation: bare (uses `config('cache.default')`), `--store=<name>`, `--store <name>`, positional (`cache:clear <name>`), and/or `--tags=<list>`"

[[command.sub]]
name = "tinker"
candidate = true

[[command.sub]]
name = "serve"
candidate = true

[[command.sub]]
name = "migrate"
candidate = true

[[command.sub]]
name = "migrate:fresh"
candidate = true

[[command.sub]]
name = "migrate:refresh"
candidate = true

[[command.sub]]
name = "migrate:reset"
candidate = true

[[command.sub]]
name = "migrate:rollback"
candidate = true

[[command.sub]]
name = "db:seed"
candidate = true

[[command.sub]]
name = "db:wipe"
candidate = true

[[command.sub]]
name = "key:generate"
candidate = true

[[command.sub]]
name = "down"
candidate = true

[[command.sub]]
name = "up"
candidate = true

[[command.sub]]
name = "invoke-serialized-closure"
candidate = true