{"owner":"fruitcake","repo":"laravel-debugbar","hasSkills":true,"totalSkillsCount":1,"totalTokensCount":1417,"categories":["anthropic-skill"],"hasMcp":false,"mcpConfig":null,"found":["resources/boost/skills/debug-using-debugbar/SKILL.md"],"skills":{"resources/boost/skills/debug-using-debugbar/SKILL.md":"---\nname: debug-using-debugbar\ndescription: >\n  Inspect what a Laravel request actually did — queries, exceptions, timing, cache, auth, views — by reading\n  the profiling data Laravel Debugbar already captured, via Artisan commands. Use when investigating a bug,\n  a slow page or endpoint, an N+1 or duplicate query problem, a failing or slow SQL statement, a 500 or\n  unexpected status code, or when asked to optimize a request. Also covers queued jobs and Artisan commands.\n  Applies even when the user does not mention \"debugbar\" or \"profiling\".\ncompatibility: Requires Laravel with fruitcake/laravel-debugbar installed, debug mode enabled, and `debugbar.storage.enabled` set.\n---\n\n## Debugging and optimizing workflow\n\n1. Find the relevant request:\n   ```bash\n   php artisan debugbar:find --issues --max=50\n   ```\n2. Inspect the request summary to see which collectors have data:\n   ```bash\n   php artisan debugbar:get {id}\n   ```\n3. Drill into the relevant collector based on the issue type:\n   ```bash\n   php artisan debugbar:get {id} --collector=exceptions\n   ```\n4. For query issues, use dedicated query analysis:\n   ```bash\n   php artisan debugbar:queries {id}\n   ```\n5. Trace the problem to source code using backtraces, then fix and re-test.\n\nIf the storage is empty, there is nothing to debug yet — ask the user to exercise the page or endpoint first,\nor trigger it yourself, then run `debugbar:find` again.\n\n## Finding requests\n\n```bash\n# List recent requests (shows summary with status, duration, memory, query count)\nphp artisan debugbar:find\n\n# Filter by URI pattern (fnmatch) and/or HTTP method\nphp artisan debugbar:find --uri=\"/api/*\" --method=POST\n\n# Only show requests with issues (exceptions, slow queries, duplicates, errors)\nphp artisan debugbar:find --issues --max=50\n\n# Customize issue thresholds (defaults: --min-queries=50, --min-duration=1000, --min-duplicates=2)\nphp artisan debugbar:find --issues --min-queries=10 --min-duration=500\n\n# Threshold options also work standalone, filtering on just that criteria\nphp artisan debugbar:find --min-queries=20\n```\n\n`--issues` flags: exceptions, non-2xx status, high query count, slow queries, duplicate query groups, slow request duration, and failed queries. Issue filtering applies on top of the fetched result set — increase `--max` to scan further back.\n\nQueued jobs and Artisan commands are stored too, with `method` set to `JOB` or `CLI`:\n\n```bash\nphp artisan debugbar:find --method=JOB      # queued jobs\nphp artisan debugbar:find --method=CLI      # artisan commands\n```\n\n## Inspecting a request\n\n```bash\n# Summary of all collectors (available collectors depend on config)\nphp artisan debugbar:get latest\nphp artisan debugbar:get {id}\n\n# Full data for a specific collector\nphp artisan debugbar:get {id} --collector=exceptions\n```\n\nPick the collector by issue type:\n- **Error/500** → `exceptions` · **Slow page** → `queries`, `time` · **Auth** → `auth`, `gate` · **Cache** → `cache`\n- **N+1 / ORM** → `queries`, `models` · **View overhead** → `views` · **External calls** → `http_client`\n- **Log output** → `log` (Laravel log events), `messages` (`debug()` calls), `logs` (log file tail)\n\nIf the collector name is wrong, the command lists the collectors that actually have data for that request.\n\n## Analyzing queries\n\n```bash\n# Overview with duplicate detection, slow flags and failed statements\nphp artisan debugbar:queries {id}\n\n# Backtrace and params for a specific statement\nphp artisan debugbar:queries {id} --statement=N\n\n# EXPLAIN plan or re-execute a SELECT\nphp artisan debugbar:queries {id} --statement=N --explain\nphp artisan debugbar:queries {id} --statement=N --result\n```\n\nThe `Flags` column marks `SLOW` and `FAILED` statements; failed statements are listed again below the table with their driver error.\n\nTwo separate repetition reports follow the table, and they mean different things:\n\n- **Duplicate queries** — identical SQL *and* identical bindings. Usually a query that should have been cached or hoisted out of a loop.\n- **Repeated query shapes with varying bindings** — the same query with a different value each time. This is the classic N+1: an unloaded relation fetched per record. Fix it with eager loading (`with()`). Detection strips literals from the SQL, so `where user_id = 1` and `where user_id = 2` count as one shape.\n\nUse `--statement=N` on any index from those groups to get the backtrace and find the origin.\n\n## JSON output\n\nAll three read commands accept `--json`, which is easier to parse than the tables and preserves exact numbers:\n\n```bash\nphp artisan debugbar:find --issues --json     # array of requests, each with an `issues` list\nphp artisan debugbar:queries {id} --json      # statements plus `duplicate_groups` and `n_plus_one_groups`\nphp artisan debugbar:get {id} --json          # raw collector data (`--raw` is the same thing)\n```\n\n## Gotchas\n\n- Always start with `debugbar:find --issues` rather than `debugbar:find` — the issue flags surface the most actionable requests immediately.\n- The `{id}` is the request ID from the `debugbar:find` output, or use `latest` to inspect the most recent request.\n- Collector availability depends on the app's debugbar config — the summary from `debugbar:get` shows which collectors have data.\n- The `Dup` column only counts *exact* duplicates (same bindings). For N+1 read the \"repeated query shapes\" section instead — that is where a per-record lazy load shows up.\n- `--explain` and `--result` only work on SELECT queries, and require `--statement=N`. They re-execute against the current database, so results may differ from the original request.\n- Very large requests are truncated by the debugbar query limits (`debugbar.options.db.soft_limit` / `hard_limit`); an `info` statement in the output says so when it happens.\n- `debugbar:clear` removes all stored data — use it to reset between debugging sessions, not mid-investigation.\n"},"files":{"resources/boost/skills/debug-using-debugbar/SKILL.md":"---\nname: debug-using-debugbar\ndescription: >\n  Inspect what a Laravel request actually did — queries, exceptions, timing, cache, auth, views — by reading\n  the profiling data Laravel Debugbar already captured, via Artisan commands. Use when investigating a bug,\n  a slow page or endpoint, an N+1 or duplicate query problem, a failing or slow SQL statement, a 500 or\n  unexpected status code, or when asked to optimize a request. Also covers queued jobs and Artisan commands.\n  Applies even when the user does not mention \"debugbar\" or \"profiling\".\ncompatibility: Requires Laravel with fruitcake/laravel-debugbar installed, debug mode enabled, and `debugbar.storage.enabled` set.\n---\n\n## Debugging and optimizing workflow\n\n1. Find the relevant request:\n   ```bash\n   php artisan debugbar:find --issues --max=50\n   ```\n2. Inspect the request summary to see which collectors have data:\n   ```bash\n   php artisan debugbar:get {id}\n   ```\n3. Drill into the relevant collector based on the issue type:\n   ```bash\n   php artisan debugbar:get {id} --collector=exceptions\n   ```\n4. For query issues, use dedicated query analysis:\n   ```bash\n   php artisan debugbar:queries {id}\n   ```\n5. Trace the problem to source code using backtraces, then fix and re-test.\n\nIf the storage is empty, there is nothing to debug yet — ask the user to exercise the page or endpoint first,\nor trigger it yourself, then run `debugbar:find` again.\n\n## Finding requests\n\n```bash\n# List recent requests (shows summary with status, duration, memory, query count)\nphp artisan debugbar:find\n\n# Filter by URI pattern (fnmatch) and/or HTTP method\nphp artisan debugbar:find --uri=\"/api/*\" --method=POST\n\n# Only show requests with issues (exceptions, slow queries, duplicates, errors)\nphp artisan debugbar:find --issues --max=50\n\n# Customize issue thresholds (defaults: --min-queries=50, --min-duration=1000, --min-duplicates=2)\nphp artisan debugbar:find --issues --min-queries=10 --min-duration=500\n\n# Threshold options also work standalone, filtering on just that criteria\nphp artisan debugbar:find --min-queries=20\n```\n\n`--issues` flags: exceptions, non-2xx status, high query count, slow queries, duplicate query groups, slow request duration, and failed queries. Issue filtering applies on top of the fetched result set — increase `--max` to scan further back.\n\nQueued jobs and Artisan commands are stored too, with `method` set to `JOB` or `CLI`:\n\n```bash\nphp artisan debugbar:find --method=JOB      # queued jobs\nphp artisan debugbar:find --method=CLI      # artisan commands\n```\n\n## Inspecting a request\n\n```bash\n# Summary of all collectors (available collectors depend on config)\nphp artisan debugbar:get latest\nphp artisan debugbar:get {id}\n\n# Full data for a specific collector\nphp artisan debugbar:get {id} --collector=exceptions\n```\n\nPick the collector by issue type:\n- **Error/500** → `exceptions` · **Slow page** → `queries`, `time` · **Auth** → `auth`, `gate` · **Cache** → `cache`\n- **N+1 / ORM** → `queries`, `models` · **View overhead** → `views` · **External calls** → `http_client`\n- **Log output** → `log` (Laravel log events), `messages` (`debug()` calls), `logs` (log file tail)\n\nIf the collector name is wrong, the command lists the collectors that actually have data for that request.\n\n## Analyzing queries\n\n```bash\n# Overview with duplicate detection, slow flags and failed statements\nphp artisan debugbar:queries {id}\n\n# Backtrace and params for a specific statement\nphp artisan debugbar:queries {id} --statement=N\n\n# EXPLAIN plan or re-execute a SELECT\nphp artisan debugbar:queries {id} --statement=N --explain\nphp artisan debugbar:queries {id} --statement=N --result\n```\n\nThe `Flags` column marks `SLOW` and `FAILED` statements; failed statements are listed again below the table with their driver error.\n\nTwo separate repetition reports follow the table, and they mean different things:\n\n- **Duplicate queries** — identical SQL *and* identical bindings. Usually a query that should have been cached or hoisted out of a loop.\n- **Repeated query shapes with varying bindings** — the same query with a different value each time. This is the classic N+1: an unloaded relation fetched per record. Fix it with eager loading (`with()`). Detection strips literals from the SQL, so `where user_id = 1` and `where user_id = 2` count as one shape.\n\nUse `--statement=N` on any index from those groups to get the backtrace and find the origin.\n\n## JSON output\n\nAll three read commands accept `--json`, which is easier to parse than the tables and preserves exact numbers:\n\n```bash\nphp artisan debugbar:find --issues --json     # array of requests, each with an `issues` list\nphp artisan debugbar:queries {id} --json      # statements plus `duplicate_groups` and `n_plus_one_groups`\nphp artisan debugbar:get {id} --json          # raw collector data (`--raw` is the same thing)\n```\n\n## Gotchas\n\n- Always start with `debugbar:find --issues` rather than `debugbar:find` — the issue flags surface the most actionable requests immediately.\n- The `{id}` is the request ID from the `debugbar:find` output, or use `latest` to inspect the most recent request.\n- Collector availability depends on the app's debugbar config — the summary from `debugbar:get` shows which collectors have data.\n- The `Dup` column only counts *exact* duplicates (same bindings). For N+1 read the \"repeated query shapes\" section instead — that is where a per-record lazy load shows up.\n- `--explain` and `--result` only work on SELECT queries, and require `--statement=N`. They re-execute against the current database, so results may differ from the original request.\n- Very large requests are truncated by the debugbar query limits (`debugbar.options.db.soft_limit` / `hard_limit`); an `info` statement in the output says so when it happens.\n- `debugbar:clear` removes all stored data — use it to reset between debugging sessions, not mid-investigation.\n"},"items":[{"name":"SKILL.md","path":"resources/boost/skills/debug-using-debugbar/SKILL.md","rawUrl":"https://raw.githubusercontent.com/fruitcake/laravel-debugbar/HEAD/resources/boost/skills/debug-using-debugbar/SKILL.md","title":"debug-using-debugbar","category":"anthropic-skill","format":"markdown","content":"---\nname: debug-using-debugbar\ndescription: >\n  Inspect what a Laravel request actually did — queries, exceptions, timing, cache, auth, views — by reading\n  the profiling data Laravel Debugbar already captured, via Artisan commands. Use when investigating a bug,\n  a slow page or endpoint, an N+1 or duplicate query problem, a failing or slow SQL statement, a 500 or\n  unexpected status code, or when asked to optimize a request. Also covers queued jobs and Artisan commands.\n  Applies even when the user does not mention \"debugbar\" or \"profiling\".\ncompatibility: Requires Laravel with fruitcake/laravel-debugbar installed, debug mode enabled, and `debugbar.storage.enabled` set.\n---\n\n## Debugging and optimizing workflow\n\n1. Find the relevant request:\n   ```bash\n   php artisan debugbar:find --issues --max=50\n   ```\n2. Inspect the request summary to see which collectors have data:\n   ```bash\n   php artisan debugbar:get {id}\n   ```\n3. Drill into the relevant collector based on the issue type:\n   ```bash\n   php artisan debugbar:get {id} --collector=exceptions\n   ```\n4. For query issues, use dedicated query analysis:\n   ```bash\n   php artisan debugbar:queries {id}\n   ```\n5. Trace the problem to source code using backtraces, then fix and re-test.\n\nIf the storage is empty, there is nothing to debug yet — ask the user to exercise the page or endpoint first,\nor trigger it yourself, then run `debugbar:find` again.\n\n## Finding requests\n\n```bash\n# List recent requests (shows summary with status, duration, memory, query count)\nphp artisan debugbar:find\n\n# Filter by URI pattern (fnmatch) and/or HTTP method\nphp artisan debugbar:find --uri=\"/api/*\" --method=POST\n\n# Only show requests with issues (exceptions, slow queries, duplicates, errors)\nphp artisan debugbar:find --issues --max=50\n\n# Customize issue thresholds (defaults: --min-queries=50, --min-duration=1000, --min-duplicates=2)\nphp artisan debugbar:find --issues --min-queries=10 --min-duration=500\n\n# Threshold options also work standalone, filtering on just that criteria\nphp artisan debugbar:find --min-queries=20\n```\n\n`--issues` flags: exceptions, non-2xx status, high query count, slow queries, duplicate query groups, slow request duration, and failed queries. Issue filtering applies on top of the fetched result set — increase `--max` to scan further back.\n\nQueued jobs and Artisan commands are stored too, with `method` set to `JOB` or `CLI`:\n\n```bash\nphp artisan debugbar:find --method=JOB      # queued jobs\nphp artisan debugbar:find --method=CLI      # artisan commands\n```\n\n## Inspecting a request\n\n```bash\n# Summary of all collectors (available collectors depend on config)\nphp artisan debugbar:get latest\nphp artisan debugbar:get {id}\n\n# Full data for a specific collector\nphp artisan debugbar:get {id} --collector=exceptions\n```\n\nPick the collector by issue type:\n- **Error/500** → `exceptions` · **Slow page** → `queries`, `time` · **Auth** → `auth`, `gate` · **Cache** → `cache`\n- **N+1 / ORM** → `queries`, `models` · **View overhead** → `views` · **External calls** → `http_client`\n- **Log output** → `log` (Laravel log events), `messages` (`debug()` calls), `logs` (log file tail)\n\nIf the collector name is wrong, the command lists the collectors that actually have data for that request.\n\n## Analyzing queries\n\n```bash\n# Overview with duplicate detection, slow flags and failed statements\nphp artisan debugbar:queries {id}\n\n# Backtrace and params for a specific statement\nphp artisan debugbar:queries {id} --statement=N\n\n# EXPLAIN plan or re-execute a SELECT\nphp artisan debugbar:queries {id} --statement=N --explain\nphp artisan debugbar:queries {id} --statement=N --result\n```\n\nThe `Flags` column marks `SLOW` and `FAILED` statements; failed statements are listed again below the table with their driver error.\n\nTwo separate repetition reports follow the table, and they mean different things:\n\n- **Duplicate queries** — identical SQL *and* identical bindings. Usually a query that should have been cached or hoisted out of a loop.\n- **Repeated query shapes with varying bindings** — the same query with a different value each time. This is the classic N+1: an unloaded relation fetched per record. Fix it with eager loading (`with()`). Detection strips literals from the SQL, so `where user_id = 1` and `where user_id = 2` count as one shape.\n\nUse `--statement=N` on any index from those groups to get the backtrace and find the origin.\n\n## JSON output\n\nAll three read commands accept `--json`, which is easier to parse than the tables and preserves exact numbers:\n\n```bash\nphp artisan debugbar:find --issues --json     # array of requests, each with an `issues` list\nphp artisan debugbar:queries {id} --json      # statements plus `duplicate_groups` and `n_plus_one_groups`\nphp artisan debugbar:get {id} --json          # raw collector data (`--raw` is the same thing)\n```\n\n## Gotchas\n\n- Always start with `debugbar:find --issues` rather than `debugbar:find` — the issue flags surface the most actionable requests immediately.\n- The `{id}` is the request ID from the `debugbar:find` output, or use `latest` to inspect the most recent request.\n- Collector availability depends on the app's debugbar config — the summary from `debugbar:get` shows which collectors have data.\n- The `Dup` column only counts *exact* duplicates (same bindings). For N+1 read the \"repeated query shapes\" section instead — that is where a per-record lazy load shows up.\n- `--explain` and `--result` only work on SELECT queries, and require `--statement=N`. They re-execute against the current database, so results may differ from the original request.\n- Very large requests are truncated by the debugbar query limits (`debugbar.options.db.soft_limit` / `hard_limit`); an `info` statement in the output says so when it happens.\n- `debugbar:clear` removes all stored data — use it to reset between debugging sessions, not mid-investigation.\n","frontmatter":{"name":"debug-using-debugbar","description":"Inspect what a Laravel request actually did — queries, exceptions, timing, cache, auth, views — by reading the profiling data Laravel Debugbar already captured, via Artisan commands. Use when investigating a bug, a slow page or endpoint, an N+1 or duplicate query problem, a failing or slow SQL statement, a 500 or unexpected status code, or when asked to optimize a request. Also covers queued jobs and Artisan commands. Applies even when the user does not mention \"debugbar\" or \"profiling\".\n","compatibility":"Requires Laravel with fruitcake/laravel-debugbar installed, debug mode enabled, and `debugbar.storage.enabled` set."},"isInternal":false,"tokens":1417,"sizeBytes":5945}],"systemPromptSnippet":"<yakaai_skills repo=\"fruitcake/laravel-debugbar\">\n<!-- File: resources/boost/skills/debug-using-debugbar/SKILL.md (Tokens: ~1417 | Category: anthropic-skill) -->\n---\nname: debug-using-debugbar\ndescription: >\n  Inspect what a Laravel request actually did — queries, exceptions, timing, cache, auth, views — by reading\n  the profiling data Laravel Debugbar already captured, via Artisan commands. Use when investigating a bug,\n  a slow page or endpoint, an N+1 or duplicate query problem, a failing or slow SQL statement, a 500 or\n  unexpected status code, or when asked to optimize a request. Also covers queued jobs and Artisan commands.\n  Applies even when the user does not mention \"debugbar\" or \"profiling\".\ncompatibility: Requires Laravel with fruitcake/laravel-debugbar installed, debug mode enabled, and `debugbar.storage.enabled` set.\n---\n\n## Debugging and optimizing workflow\n\n1. Find the relevant request:\n   ```bash\n   php artisan debugbar:find --issues --max=50\n   ```\n2. Inspect the request summary to see which collectors have data:\n   ```bash\n   php artisan debugbar:get {id}\n   ```\n3. Drill into the relevant collector based on the issue type:\n   ```bash\n   php artisan debugbar:get {id} --collector=exceptions\n   ```\n4. For query issues, use dedicated query analysis:\n   ```bash\n   php artisan debugbar:queries {id}\n   ```\n5. Trace the problem to source code using backtraces, then fix and re-test.\n\nIf the storage is empty, there is nothing to debug yet — ask the user to exercise the page or endpoint first,\nor trigger it yourself, then run `debugbar:find` again.\n\n## Finding requests\n\n```bash\n# List recent requests (shows summary with status, duration, memory, query count)\nphp artisan debugbar:find\n\n# Filter by URI pattern (fnmatch) and/or HTTP method\nphp artisan debugbar:find --uri=\"/api/*\" --method=POST\n\n# Only show requests with issues (exceptions, slow queries, duplicates, errors)\nphp artisan debugbar:find --issues --max=50\n\n# Customize issue thresholds (defaults: --min-queries=50, --min-duration=1000, --min-duplicates=2)\nphp artisan debugbar:find --issues --min-queries=10 --min-duration=500\n\n# Threshold options also work standalone, filtering on just that criteria\nphp artisan debugbar:find --min-queries=20\n```\n\n`--issues` flags: exceptions, non-2xx status, high query count, slow queries, duplicate query groups, slow request duration, and failed queries. Issue filtering applies on top of the fetched result set — increase `--max` to scan further back.\n\nQueued jobs and Artisan commands are stored too, with `method` set to `JOB` or `CLI`:\n\n```bash\nphp artisan debugbar:find --method=JOB      # queued jobs\nphp artisan debugbar:find --method=CLI      # artisan commands\n```\n\n## Inspecting a request\n\n```bash\n# Summary of all collectors (available collectors depend on config)\nphp artisan debugbar:get latest\nphp artisan debugbar:get {id}\n\n# Full data for a specific collector\nphp artisan debugbar:get {id} --collector=exceptions\n```\n\nPick the collector by issue type:\n- **Error/500** → `exceptions` · **Slow page** → `queries`, `time` · **Auth** → `auth`, `gate` · **Cache** → `cache`\n- **N+1 / ORM** → `queries`, `models` · **View overhead** → `views` · **External calls** → `http_client`\n- **Log output** → `log` (Laravel log events), `messages` (`debug()` calls), `logs` (log file tail)\n\nIf the collector name is wrong, the command lists the collectors that actually have data for that request.\n\n## Analyzing queries\n\n```bash\n# Overview with duplicate detection, slow flags and failed statements\nphp artisan debugbar:queries {id}\n\n# Backtrace and params for a specific statement\nphp artisan debugbar:queries {id} --statement=N\n\n# EXPLAIN plan or re-execute a SELECT\nphp artisan debugbar:queries {id} --statement=N --explain\nphp artisan debugbar:queries {id} --statement=N --result\n```\n\nThe `Flags` column marks `SLOW` and `FAILED` statements; failed statements are listed again below the table with their driver error.\n\nTwo separate repetition reports follow the table, and they mean different things:\n\n- **Duplicate queries** — identical SQL *and* identical bindings. Usually a query that should have been cached or hoisted out of a loop.\n- **Repeated query shapes with varying bindings** — the same query with a different value each time. This is the classic N+1: an unloaded relation fetched per record. Fix it with eager loading (`with()`). Detection strips literals from the SQL, so `where user_id = 1` and `where user_id = 2` count as one shape.\n\nUse `--statement=N` on any index from those groups to get the backtrace and find the origin.\n\n## JSON output\n\nAll three read commands accept `--json`, which is easier to parse than the tables and preserves exact numbers:\n\n```bash\nphp artisan debugbar:find --issues --json     # array of requests, each with an `issues` list\nphp artisan debugbar:queries {id} --json      # statements plus `duplicate_groups` and `n_plus_one_groups`\nphp artisan debugbar:get {id} --json          # raw collector data (`--raw` is the same thing)\n```\n\n## Gotchas\n\n- Always start with `debugbar:find --issues` rather than `debugbar:find` — the issue flags surface the most actionable requests immediately.\n- The `{id}` is the request ID from the `debugbar:find` output, or use `latest` to inspect the most recent request.\n- Collector availability depends on the app's debugbar config — the summary from `debugbar:get` shows which collectors have data.\n- The `Dup` column only counts *exact* duplicates (same bindings). For N+1 read the \"repeated query shapes\" section instead — that is where a per-record lazy load shows up.\n- `--explain` and `--result` only work on SELECT queries, and require `--statement=N`. They re-execute against the current database, so results may differ from the original request.\n- Very large requests are truncated by the debugbar query limits (`debugbar.options.db.soft_limit` / `hard_limit`); an `info` statement in the output says so when it happens.\n- `debugbar:clear` removes all stored data — use it to reset between debugging sessions, not mid-investigation.\n</yakaai_skills>"}