[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6HQSY4HTV2ZYBMM0TF7ZGQ3":3,"skill-same:01M6HQSY4HTV2ZYBMM0TF7ZGQ3":264},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":31,"publishedAt":54,"linkOnly":55,"markdownContent":56,"markdownBody":57,"frontMatter":58,"refName":62,"commitSha":63,"skillDirectory":64,"forksCount":65,"repositoryHtmlUrl":66,"repositoryHomepageUrl":67,"ownerHtmlUrl":68,"ownerBlogUrl":69,"ownerDescription":6,"updatedAt":70,"install":71,"resources":84},"01M6HQSY4HTV2ZYBMM0TF7ZGQ3","pi-dashboard",null,"Monitor and control the pi-dashboard server. List sessions, send prompts, abort runs, spawn new sessions, manage git branches, control flows, and configure the dashboard — all via REST API. Use when you need to interact with other pi sessions, check dashboard health, or orchestrate multi-session workflows.","BlackBeltTechnology\u002Fpi-agent-dashboard","BlackBeltTechnology","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F8101592?v=4","01M6HQDX7QAJA0QP4NYRYBMJ8A","BlackBelt Technology","01M6HQDXCC7719N9YDMQVH9JS6",346,"MIT","https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002FSKILL.md",[18,23,26],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000013","分析与可视化",{"categoryNo":27,"categoryName":28,"taxonomyType":29,"taxonomyTypeDesc":30},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53],"pi","pi dashboard","dashboard","when","new","send","use","sessions","monitor","session","manage","list","git","spawn","server","api","you","configure","workflows","branches","flows","orchestrate","2026-11-10 10:12:30",false,"---\nname: pi-dashboard\ndescription: >\n  Monitor and control the pi-dashboard server. List sessions, send prompts,\n  abort runs, spawn new sessions, manage git branches, control flows, and\n  configure the dashboard — all via REST API. Use when you need to interact\n  with other pi sessions, check dashboard health, or orchestrate multi-session\n  workflows.\nlicense: MIT\nmetadata:\n  author: pi-dashboard\n  version: \"1.0\"\n---\n\n# Pi Dashboard Control\n\nInteract with the pi-dashboard server from any pi session via its REST API.\n\n## Typed bus client (preferred for commands)\n\nSession\u002Fflow COMMAND verbs now ride the SAME WebSocket bus the web client uses,\nvia [`scripts\u002Fdashboard-bus.ts`](scripts\u002Fdashboard-bus.ts) — a thin CLI wrapping\n`@blackbelt-technology\u002Fpi-dashboard-bus-client`. It discovers the port itself\n(config.json \u002F `DASHBOARD_PORT` \u002F 8000) and resolves an id-prefix to a full\nsession id from the live subscription snapshot, so command prose no longer needs\nto teach BASE-URL derivation or GET `\u002Fapi\u002Fsessions` id-resolution.\n\nCanonical example:\n\n```bash\nnpx tsx .\u002Fscripts\u002Fdashboard-bus.ts spawn \u002Fpath\u002Fto\u002Fproj --prompt \"\u002Fopsx-explore add-auth\" --model @planning --thinking high\nnpx tsx .\u002Fscripts\u002Fdashboard-bus.ts until \u003Cid> idle\nnpx tsx .\u002Fscripts\u002Fdashboard-bus.ts prompt \u003Cid> \"run the tests\"\n```\n\nLLM authors can also write an ordinary type-checked `.ts` script importing\n`{ connect }` from `@blackbelt-technology\u002Fpi-dashboard-bus-client` for multi-step\norchestration (spawn → prompt → until idle → read → plugin) using `connect()`,\n`spawn()`, `prompt()`, `until()`, `read.sessions()`, and `plugin(\"goal\", …)`.\n\n### Tier split\n\n- **COMMAND verbs → bus** (`dashboard-bus.ts`): abort, send_prompt, spawn,\n  resume, flow (flows plugin action), set_model, set_thinking_level, rename, archive\u002Funarchive,\n  attach\u002Fdetach_proposal, plugin goal.\n- **READ-ONLY + no-WS-twin → REST** (`dashboard-api.sh`): session \u002F health \u002F\n  config reads, git ops, grep\u002Fbrowse, `plugin_config_write`, tunnel, peer scan,\n  openspec archive\u002Ftoggle. REST remains a supported compatibility shell.\n\n## Setup — Discover the Dashboard URL\n\nRead the port from config, defaulting to `8000`:\n\n```bash\nPORT=$(cat ~\u002F.pi\u002Fdashboard\u002Fconfig.json 2>\u002Fdev\u002Fnull | grep '\"port\"' | grep -o '[0-9]*' || echo 8000)\nBASE=\"http:\u002F\u002Flocalhost:$PORT\"\n```\n\nVerify the server is running:\n\n```bash\ncurl -s \"$BASE\u002Fapi\u002Fhealth\" | jq .\n# Expected: { \"ok\": true, \"pid\": ..., \"uptime\": ... }\n```\n\n## Authentication\n\nBy default, auth is **disabled**. Local requests still need to PROVE they come from this machine:\nunder the strict `requireLocalProof` default a bare `curl` to a non-observe route (anything that\nchanges state, plus `\u002Fapi\u002Fconfig`, `\u002Fapi\u002Fws-ticket`, …) is refused with `403 local_proof_required`.\nRead-only (observe) routes such as `\u002Fapi\u002Fsessions` and `\u002Fapi\u002Fhealth` stay open to a plain `curl`.\nUse `pi-dashboard api \u003CMETHOD> \u003Cpath> [--data '\u003Cjson>']` (it mints a fresh local proof per request),\nor `scripts\u002Fdashboard-api.sh`, for everything else.\n\nWhen auth is enabled (remote\u002Ftunnel access), include the JWT cookie:\n\n```bash\n# Check auth status\ncurl -s \"$BASE\u002Fauth\u002Fstatus\" | jq .\n\n# If auth is enabled, include token in requests:\ncurl -s -b \"pi_dash_token=YOUR_JWT\" \"$BASE\u002Fapi\u002Fsessions\" | jq .\n```\n\n## Quick Reference\n\n### Monitor\n\n| Action | Command |\n|--------|---------|\n| List sessions | `curl -s \"$BASE\u002Fapi\u002Fsessions\" \\| jq .` |\n| Server health | `curl -s \"$BASE\u002Fapi\u002Fhealth\" \\| jq .` |\n| Session file diff | `curl -s \"$BASE\u002Fapi\u002Fsession-diff?sessionId=ID\" \\| jq .` |\n| Read file | `curl -s \"$BASE\u002Fapi\u002Ffile?cwd=CWD&path=REL\" \\| jq .` |\n| List pinned dirs | `curl -s \"$BASE\u002Fapi\u002Fpinned-dirs\" \\| jq .` |\n\n### Control Sessions\n\n> The `\u002Fdashboard:session-*` and `\u002Fdashboard:flow-*` MUTATION commands now route\n> through the bus CLI (`scripts\u002Fdashboard-bus.ts`). The REST rows below stay as a\n> supported compatibility shell.\n\n| Action | Command |\n|--------|---------|\n| Send prompt | `pi-dashboard api POST \u002Fapi\u002Fsession\u002FID\u002Fprompt --data '{\"text\":\"your message\"}'` |\n| Abort | `pi-dashboard api POST \u002Fapi\u002Fsession\u002FID\u002Fabort --data '{}'` |\n| Shutdown session | `pi-dashboard api POST \u002Fapi\u002Fsession\u002FID\u002Fshutdown --data '{}'` |\n| Rename | `pi-dashboard api POST \u002Fapi\u002Fsession\u002FID\u002Frename --data '{\"name\":\"my-name\"}'` |\n| Archive | `pi-dashboard api POST \u002Fapi\u002Fsession\u002FID\u002Farchive --data '{}'` |\n| Unarchive | `pi-dashboard api POST \u002Fapi\u002Fsession\u002FID\u002Funarchive --data '{}'` |\n\n> `GET \u002Fapi\u002Fsessions` lists RESIDENT sessions only — archived sessions are excluded.\n> Resolve an archived id with `GET \u002Fapi\u002Fsessions\u002Farchived?q=\u003Ctext>` (or\n> `?cwd=\u003Cgroup-path>`), or read one row with `GET \u002Fapi\u002Fsessions\u002Farchived\u002F:id`.\n> Archiving an alive-but-idle session terminates its pi process and completes on\n> the ended transition; a running or interrupted (`live:true`) session is refused\n> (WS error \u002F REST 409).\n| Spawn new | `pi-dashboard api POST \u002Fapi\u002Fsession\u002Fspawn --data '{\"cwd\":\"\u002Fpath\",\"model\":\"@fast\",\"thinkingLevel\":\"low\"}'` (`model`\u002F`thinkingLevel`\u002F`initialPrompt`\u002F`attachProposal` optional; `@role` resolved once; invalid → 400) |\n| Resume\u002FFork | `pi-dashboard api POST \u002Fapi\u002Fsession\u002FID\u002Fresume --data '{\"mode\":\"continue\"}'` |\n\n### Flow Control\n\n| Action | Command |\n|--------|---------|\n| Abort flow | `pi-dashboard api POST \u002Fapi\u002Fplugins\u002Fflows\u002Fcontrol --data '{\"sessionId\":\"ID\",\"action\":\"flow.abort\"}'` |\n| Toggle autonomous | `pi-dashboard api POST \u002Fapi\u002Fplugins\u002Fflows\u002Fcontrol --data '{\"sessionId\":\"ID\",\"action\":\"flow.toggle-autonomous\"}'` |\n\n### Model \u002F Thinking\n\n| Action | Command |\n|--------|---------|\n| Set model | `pi-dashboard api POST \u002Fapi\u002Fsession\u002FID\u002Fmodel --data '{\"provider\":\"anthropic\",\"modelId\":\"claude-sonnet-4-20250514\"}'` |\n| Set thinking | `pi-dashboard api POST \u002Fapi\u002Fsession\u002FID\u002Fthinking-level --data '{\"level\":\"high\"}'` |\n\n### Git Operations\n\n| Action | Command |\n|--------|---------|\n| List branches | `curl -s \"$BASE\u002Fapi\u002Fgit\u002Fbranches?cwd=CWD\" \\| jq .` |\n| Checkout | `pi-dashboard api POST \u002Fapi\u002Fgit\u002Fcheckout --data '{\"cwd\":\"CWD\",\"branch\":\"main\"}'` |\n| Init repo | `pi-dashboard api POST \u002Fapi\u002Fgit\u002Finit --data '{\"cwd\":\"CWD\"}'` |\n| Stash pop | `pi-dashboard api POST \u002Fapi\u002Fgit\u002Fstash-pop --data '{\"cwd\":\"CWD\"}'` |\n\n### OpenSpec\n\n| Action | Command |\n|--------|---------|\n| Attach proposal | `pi-dashboard api POST \u002Fapi\u002Fsession\u002FID\u002Fattach-proposal --data '{\"changeName\":\"change-name\"}'` |\n| Detach proposal | `pi-dashboard api POST \u002Fapi\u002Fsession\u002FID\u002Fdetach-proposal --data '{}'` |\n| Archive listing | `curl -s \"$BASE\u002Fapi\u002Fopenspec-archive?cwd=CWD\" \\| jq .` |\n\n### Configuration\n\n| Action | Command |\n|--------|---------|\n| Read config | `pi-dashboard api GET \u002Fapi\u002Fconfig \\| jq .` |\n| Update config | `pi-dashboard api PUT \u002Fapi\u002Fconfig --data '{\"autoShutdown\":false}'` |\n\n### Access Provisioning\n\nPropose-only: the dashboard operator approves each folder. Prefer the `project-access` skill (map \u002F suggest \u002F provision); never call the operator-only `settle` \u002F `dismiss-all` routes.\n\n| Action | Command |\n|--------|---------|\n| Submit request | `pi-dashboard api POST \u002Fapi\u002Faccess\u002Fprovision --data '{\"projectRoot\":\"\u002Fabs\u002Fproject\",\"lines\":[{\"path\":\"..\u002Flib\",\"why\":\"tests\"}]}'` |\n| Pending requests | `curl -s \"$BASE\u002Fapi\u002Faccess\u002Fprovision\" \\| jq .` |\n| Request status | `pi-dashboard api GET \u002Fapi\u002Faccess\u002Fprovision\u002FID \\| jq .` |\n\n### Tunnel\n\n| Action | Command |\n|--------|---------|\n| Tunnel status | `curl -s \"$BASE\u002Fapi\u002Ftunnel-status\" \\| jq .` |\n| Connect tunnel | `pi-dashboard api POST \u002Fapi\u002Ftunnel-connect` |\n| Disconnect tunnel | `pi-dashboard api POST \u002Fapi\u002Ftunnel-disconnect` |\n\n## Helper Script\n\nA convenience wrapper is available at [scripts\u002Fdashboard-api.sh](scripts\u002Fdashboard-api.sh):\n\n```bash\n# Usage:\n.\u002Fscripts\u002Fdashboard-api.sh GET \u002Fapi\u002Fsessions\n.\u002Fscripts\u002Fdashboard-api.sh POST \u002Fapi\u002Fsession\u002FID\u002Fprompt '{\"text\":\"hello\"}'\n.\u002Fscripts\u002Fdashboard-api.sh POST \u002Fapi\u002Fsession\u002Fspawn '{\"cwd\":\"\u002Fpath\u002Fto\u002Fproject\"}'\n```\n\n## Slash Commands\n\nThe `\u002Fdashboard:*` namespace wraps common operations as one-shot slash commands.\nFiles live in [`commands\u002F`](commands\u002F) and are auto-discovered by the bridge's\nprompt-expander (`\u002Fdashboard:session-list` resolves `dashboard-session-list.md`).\n\nTwo classes:\n\n- **LLM-free** (`executable: bash` frontmatter) — body runs as bash, output\n  renders in chat, the LLM is never invoked (chat shows an \"ℹ ran locally\"\n  footer). Read-only \u002F zero-blast-radius ops. Example:\n\n  ```\n  \u002Fdashboard:session-list          # table of every session, no token cost\n  \u002Fdashboard:session-info abc123   # all fields for a session by id-prefix\n  \u002Fdashboard:server-health         # pid + uptime\n  ```\n\n- **LLM-bound** (no `executable` frontmatter) — body expands into a user\n  message the LLM interprets. Mutations needing judgment or free-form text.\n  Example:\n\n  ```\n  \u002Fdashboard:session-tell abc123 please run the tests\n  \u002Fdashboard:session-abort-all     # asks which sessions before aborting\n  ```\n\nLLM-free bodies get `PI_DASHBOARD_PORT` \u002F `PI_DASHBOARD_BASE` injected, so they\ncurl the running dashboard without re-deriving the port. Full list:\n[references\u002Fslash-commands.md](references\u002Fslash-commands.md).\nConvention + frontmatter: [commands\u002FREADME.md](commands\u002FREADME.md).\n\n## Detailed References\n\n- [Slash Commands](references\u002Fslash-commands.md) — every `\u002Fdashboard:*` command, args, LLM-free vs LLM-bound\n- [API Reference](references\u002Fapi-reference.md) — Complete endpoint documentation with request\u002Fresponse schemas\n- [Recipes](references\u002Frecipes.md) — Multi-step orchestration workflows\n","# Pi Dashboard Control\n\nInteract with the pi-dashboard server from any pi session via its REST API.\n\n## Typed bus client (preferred for commands)\n\nSession\u002Fflow COMMAND verbs now ride the SAME WebSocket bus the web client uses,\nvia [`scripts\u002Fdashboard-bus.ts`](scripts\u002Fdashboard-bus.ts) — a thin CLI wrapping\n`@blackbelt-technology\u002Fpi-dashboard-bus-client`. It discovers the port itself\n(config.json \u002F `DASHBOARD_PORT` \u002F 8000) and resolves an id-prefix to a full\nsession id from the live subscription snapshot, so command prose no longer needs\nto teach BASE-URL derivation or GET `\u002Fapi\u002Fsessions` id-resolution.\n\nCanonical example:\n\n```bash\nnpx tsx .\u002Fscripts\u002Fdashboard-bus.ts spawn \u002Fpath\u002Fto\u002Fproj --prompt \"\u002Fopsx-explore add-auth\" --model @planning --thinking high\nnpx tsx .\u002Fscripts\u002Fdashboard-bus.ts until \u003Cid> idle\nnpx tsx .\u002Fscripts\u002Fdashboard-bus.ts prompt \u003Cid> \"run the tests\"\n```\n\nLLM authors can also write an ordinary type-checked `.ts` script importing\n`{ connect }` from `@blackbelt-technology\u002Fpi-dashboard-bus-client` for multi-step\norchestration (spawn → prompt → until idle → read → plugin) using `connect()`,\n`spawn()`, `prompt()`, `until()`, `read.sessions()`, and `plugin(\"goal\", …)`.\n\n### Tier split\n\n- **COMMAND verbs → bus** (`dashboard-bus.ts`): abort, send_prompt, spawn,\n  resume, flow (flows plugin action), set_model, set_thinking_level, rename, archive\u002Funarchive,\n  attach\u002Fdetach_proposal, plugin goal.\n- **READ-ONLY + no-WS-twin → REST** (`dashboard-api.sh`): session \u002F health \u002F\n  config reads, git ops, grep\u002Fbrowse, `plugin_config_write`, tunnel, peer scan,\n  openspec archive\u002Ftoggle. REST remains a supported compatibility shell.\n\n## Setup — Discover the Dashboard URL\n\nRead the port from config, defaulting to `8000`:\n\n```bash\nPORT=$(cat ~\u002F.pi\u002Fdashboard\u002Fconfig.json 2>\u002Fdev\u002Fnull | grep '\"port\"' | grep -o '[0-9]*' || echo 8000)\nBASE=\"http:\u002F\u002Flocalhost:$PORT\"\n```\n\nVerify the server is running:\n\n```bash\ncurl -s \"$BASE\u002Fapi\u002Fhealth\" | jq .\n# Expected: { \"ok\": true, \"pid\": ..., \"uptime\": ... }\n```\n\n## Authentication\n\nBy default, auth is **disabled**. Local requests still need to PROVE they come from this machine:\nunder the strict `requireLocalProof` default a bare `curl` to a non-observe route (anything that\nchanges state, plus `\u002Fapi\u002Fconfig`, `\u002Fapi\u002Fws-ticket`, …) is refused with `403 local_proof_required`.\nRead-only (observe) routes such as `\u002Fapi\u002Fsessions` and `\u002Fapi\u002Fhealth` stay open to a plain `curl`.\nUse `pi-dashboard api \u003CMETHOD> \u003Cpath> [--data '\u003Cjson>']` (it mints a fresh local proof per request),\nor `scripts\u002Fdashboard-api.sh`, for everything else.\n\nWhen auth is enabled (remote\u002Ftunnel access), include the JWT cookie:\n\n```bash\n# Check auth status\ncurl -s \"$BASE\u002Fauth\u002Fstatus\" | jq .\n\n# If auth is enabled, include token in requests:\ncurl -s -b \"pi_dash_token=YOUR_JWT\" \"$BASE\u002Fapi\u002Fsessions\" | jq .\n```\n\n## Quick Reference\n\n### Monitor\n\n| Action | Command |\n|--------|---------|\n| List sessions | `curl -s \"$BASE\u002Fapi\u002Fsessions\" \\| jq .` |\n| Server health | `curl -s \"$BASE\u002Fapi\u002Fhealth\" \\| jq .` |\n| Session file diff | `curl -s \"$BASE\u002Fapi\u002Fsession-diff?sessionId=ID\" \\| jq .` |\n| Read file | `curl -s \"$BASE\u002Fapi\u002Ffile?cwd=CWD&path=REL\" \\| jq .` |\n| List pinned dirs | `curl -s \"$BASE\u002Fapi\u002Fpinned-dirs\" \\| jq .` |\n\n### Control Sessions\n\n> The `\u002Fdashboard:session-*` and `\u002Fdashboard:flow-*` MUTATION commands now route\n> through the bus CLI (`scripts\u002Fdashboard-bus.ts`). The REST rows below stay as a\n> supported compatibility shell.\n\n| Action | Command |\n|--------|---------|\n| Send prompt | `pi-dashboard api POST \u002Fapi\u002Fsession\u002FID\u002Fprompt --data '{\"text\":\"your message\"}'` |\n| Abort | `pi-dashboard api POST \u002Fapi\u002Fsession\u002FID\u002Fabort --data '{}'` |\n| Shutdown session | `pi-dashboard api POST \u002Fapi\u002Fsession\u002FID\u002Fshutdown --data '{}'` |\n| Rename | `pi-dashboard api POST \u002Fapi\u002Fsession\u002FID\u002Frename --data '{\"name\":\"my-name\"}'` |\n| Archive | `pi-dashboard api POST \u002Fapi\u002Fsession\u002FID\u002Farchive --data '{}'` |\n| Unarchive | `pi-dashboard api POST \u002Fapi\u002Fsession\u002FID\u002Funarchive --data '{}'` |\n\n> `GET \u002Fapi\u002Fsessions` lists RESIDENT sessions only — archived sessions are excluded.\n> Resolve an archived id with `GET \u002Fapi\u002Fsessions\u002Farchived?q=\u003Ctext>` (or\n> `?cwd=\u003Cgroup-path>`), or read one row with `GET \u002Fapi\u002Fsessions\u002Farchived\u002F:id`.\n> Archiving an alive-but-idle session terminates its pi process and completes on\n> the ended transition; a running or interrupted (`live:true`) session is refused\n> (WS error \u002F REST 409).\n| Spawn new | `pi-dashboard api POST \u002Fapi\u002Fsession\u002Fspawn --data '{\"cwd\":\"\u002Fpath\",\"model\":\"@fast\",\"thinkingLevel\":\"low\"}'` (`model`\u002F`thinkingLevel`\u002F`initialPrompt`\u002F`attachProposal` optional; `@role` resolved once; invalid → 400) |\n| Resume\u002FFork | `pi-dashboard api POST \u002Fapi\u002Fsession\u002FID\u002Fresume --data '{\"mode\":\"continue\"}'` |\n\n### Flow Control\n\n| Action | Command |\n|--------|---------|\n| Abort flow | `pi-dashboard api POST \u002Fapi\u002Fplugins\u002Fflows\u002Fcontrol --data '{\"sessionId\":\"ID\",\"action\":\"flow.abort\"}'` |\n| Toggle autonomous | `pi-dashboard api POST \u002Fapi\u002Fplugins\u002Fflows\u002Fcontrol --data '{\"sessionId\":\"ID\",\"action\":\"flow.toggle-autonomous\"}'` |\n\n### Model \u002F Thinking\n\n| Action | Command |\n|--------|---------|\n| Set model | `pi-dashboard api POST \u002Fapi\u002Fsession\u002FID\u002Fmodel --data '{\"provider\":\"anthropic\",\"modelId\":\"claude-sonnet-4-20250514\"}'` |\n| Set thinking | `pi-dashboard api POST \u002Fapi\u002Fsession\u002FID\u002Fthinking-level --data '{\"level\":\"high\"}'` |\n\n### Git Operations\n\n| Action | Command |\n|--------|---------|\n| List branches | `curl -s \"$BASE\u002Fapi\u002Fgit\u002Fbranches?cwd=CWD\" \\| jq .` |\n| Checkout | `pi-dashboard api POST \u002Fapi\u002Fgit\u002Fcheckout --data '{\"cwd\":\"CWD\",\"branch\":\"main\"}'` |\n| Init repo | `pi-dashboard api POST \u002Fapi\u002Fgit\u002Finit --data '{\"cwd\":\"CWD\"}'` |\n| Stash pop | `pi-dashboard api POST \u002Fapi\u002Fgit\u002Fstash-pop --data '{\"cwd\":\"CWD\"}'` |\n\n### OpenSpec\n\n| Action | Command |\n|--------|---------|\n| Attach proposal | `pi-dashboard api POST \u002Fapi\u002Fsession\u002FID\u002Fattach-proposal --data '{\"changeName\":\"change-name\"}'` |\n| Detach proposal | `pi-dashboard api POST \u002Fapi\u002Fsession\u002FID\u002Fdetach-proposal --data '{}'` |\n| Archive listing | `curl -s \"$BASE\u002Fapi\u002Fopenspec-archive?cwd=CWD\" \\| jq .` |\n\n### Configuration\n\n| Action | Command |\n|--------|---------|\n| Read config | `pi-dashboard api GET \u002Fapi\u002Fconfig \\| jq .` |\n| Update config | `pi-dashboard api PUT \u002Fapi\u002Fconfig --data '{\"autoShutdown\":false}'` |\n\n### Access Provisioning\n\nPropose-only: the dashboard operator approves each folder. Prefer the `project-access` skill (map \u002F suggest \u002F provision); never call the operator-only `settle` \u002F `dismiss-all` routes.\n\n| Action | Command |\n|--------|---------|\n| Submit request | `pi-dashboard api POST \u002Fapi\u002Faccess\u002Fprovision --data '{\"projectRoot\":\"\u002Fabs\u002Fproject\",\"lines\":[{\"path\":\"..\u002Flib\",\"why\":\"tests\"}]}'` |\n| Pending requests | `curl -s \"$BASE\u002Fapi\u002Faccess\u002Fprovision\" \\| jq .` |\n| Request status | `pi-dashboard api GET \u002Fapi\u002Faccess\u002Fprovision\u002FID \\| jq .` |\n\n### Tunnel\n\n| Action | Command |\n|--------|---------|\n| Tunnel status | `curl -s \"$BASE\u002Fapi\u002Ftunnel-status\" \\| jq .` |\n| Connect tunnel | `pi-dashboard api POST \u002Fapi\u002Ftunnel-connect` |\n| Disconnect tunnel | `pi-dashboard api POST \u002Fapi\u002Ftunnel-disconnect` |\n\n## Helper Script\n\nA convenience wrapper is available at [scripts\u002Fdashboard-api.sh](scripts\u002Fdashboard-api.sh):\n\n```bash\n# Usage:\n.\u002Fscripts\u002Fdashboard-api.sh GET \u002Fapi\u002Fsessions\n.\u002Fscripts\u002Fdashboard-api.sh POST \u002Fapi\u002Fsession\u002FID\u002Fprompt '{\"text\":\"hello\"}'\n.\u002Fscripts\u002Fdashboard-api.sh POST \u002Fapi\u002Fsession\u002Fspawn '{\"cwd\":\"\u002Fpath\u002Fto\u002Fproject\"}'\n```\n\n## Slash Commands\n\nThe `\u002Fdashboard:*` namespace wraps common operations as one-shot slash commands.\nFiles live in [`commands\u002F`](commands\u002F) and are auto-discovered by the bridge's\nprompt-expander (`\u002Fdashboard:session-list` resolves `dashboard-session-list.md`).\n\nTwo classes:\n\n- **LLM-free** (`executable: bash` frontmatter) — body runs as bash, output\n  renders in chat, the LLM is never invoked (chat shows an \"ℹ ran locally\"\n  footer). Read-only \u002F zero-blast-radius ops. Example:\n\n  ```\n  \u002Fdashboard:session-list          # table of every session, no token cost\n  \u002Fdashboard:session-info abc123   # all fields for a session by id-prefix\n  \u002Fdashboard:server-health         # pid + uptime\n  ```\n\n- **LLM-bound** (no `executable` frontmatter) — body expands into a user\n  message the LLM interprets. Mutations needing judgment or free-form text.\n  Example:\n\n  ```\n  \u002Fdashboard:session-tell abc123 please run the tests\n  \u002Fdashboard:session-abort-all     # asks which sessions before aborting\n  ```\n\nLLM-free bodies get `PI_DASHBOARD_PORT` \u002F `PI_DASHBOARD_BASE` injected, so they\ncurl the running dashboard without re-deriving the port. Full list:\n[references\u002Fslash-commands.md](references\u002Fslash-commands.md).\nConvention + frontmatter: [commands\u002FREADME.md](commands\u002FREADME.md).\n\n## Detailed References\n\n- [Slash Commands](references\u002Fslash-commands.md) — every `\u002Fdashboard:*` command, args, LLM-free vs LLM-bound\n- [API Reference](references\u002Fapi-reference.md) — Complete endpoint documentation with request\u002Fresponse schemas\n- [Recipes](references\u002Frecipes.md) — Multi-step orchestration workflows\n",{"name":5,"license":15,"metadata":59,"description":61},{"author":5,"version":60},"1.0","Monitor and control the pi-dashboard server. List sessions, send prompts, abort runs, spawn new sessions, manage git branches, control flows, and configure the dashboard — all via REST API. Use when you need to interact with other pi sessions, check dashboard health, or orchestrate multi-session workflows.\n","develop","656100bac394a948578ec8b9f7fefdac1c2726c4","packages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard",55,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard","https:\u002F\u002Fpi-dashboard.dev\u002F","https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology","https:\u002F\u002Fwww.blackbelt.hu","2026-11-11 07:43:10",{"source":8,"skillName":5,"commands":72,"prompt":82,"zipAvailable":83},[73,76,79],{"tool":74,"command":75},"npx","npx skills add BlackBeltTechnology\u002Fpi-agent-dashboard --skill pi-dashboard",{"tool":77,"command":78},"bunx","bunx skills add BlackBeltTechnology\u002Fpi-agent-dashboard --skill pi-dashboard",{"tool":80,"command":81},"pnpm","pnpm dlx skills add BlackBeltTechnology\u002Fpi-agent-dashboard --skill pi-dashboard","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002FSKILL.md",true,[85,91,95,99,103,107,111,115,119,123,127,131,135,139,143,147,151,155,159,162,166,170,174,178,182,186,190,194,198,202,206,210,214,218,222,226,230,234,238,242,246,252,256,260],{"path":86,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":89,"sourceHtmlUrl":90},"commands\u002Fdashboard-flow-abort.md","REFERENCE","参考文档",627,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002Fcommands\u002Fdashboard-flow-abort.md",{"path":92,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":93,"sourceHtmlUrl":94},"commands\u002Fdashboard-flow-auto.md",681,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002Fcommands\u002Fdashboard-flow-auto.md",{"path":96,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":97,"sourceHtmlUrl":98},"commands\u002Fdashboard-git-branches.md",254,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002Fcommands\u002Fdashboard-git-branches.md",{"path":100,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":101,"sourceHtmlUrl":102},"commands\u002Fdashboard-git-init.md",641,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002Fcommands\u002Fdashboard-git-init.md",{"path":104,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":105,"sourceHtmlUrl":106},"commands\u002Fdashboard-git-stash-pop.md",643,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002Fcommands\u002Fdashboard-git-stash-pop.md",{"path":108,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":109,"sourceHtmlUrl":110},"commands\u002Fdashboard-list-models.md",1238,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002Fcommands\u002Fdashboard-list-models.md",{"path":112,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":113,"sourceHtmlUrl":114},"commands\u002Fdashboard-list-models.md.AGENTS.md",341,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002Fcommands\u002Fdashboard-list-models.md.AGENTS.md",{"path":116,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":117,"sourceHtmlUrl":118},"commands\u002Fdashboard-peer-list.md",212,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002Fcommands\u002Fdashboard-peer-list.md",{"path":120,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":121,"sourceHtmlUrl":122},"commands\u002Fdashboard-peer-scan.md",278,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002Fcommands\u002Fdashboard-peer-scan.md",{"path":124,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":125,"sourceHtmlUrl":126},"commands\u002Fdashboard-pin-list.md",149,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002Fcommands\u002Fdashboard-pin-list.md",{"path":128,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":129,"sourceHtmlUrl":130},"commands\u002Fdashboard-proposal-archive.md",258,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002Fcommands\u002Fdashboard-proposal-archive.md",{"path":132,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":133,"sourceHtmlUrl":134},"commands\u002Fdashboard-proposal-attach.md",548,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002Fcommands\u002Fdashboard-proposal-attach.md",{"path":136,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":137,"sourceHtmlUrl":138},"commands\u002Fdashboard-proposal-detach.md",498,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002Fcommands\u002Fdashboard-proposal-detach.md",{"path":140,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":141,"sourceHtmlUrl":142},"commands\u002Fdashboard-server-config.md",156,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002Fcommands\u002Fdashboard-server-config.md",{"path":144,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":145,"sourceHtmlUrl":146},"commands\u002Fdashboard-server-health.md",200,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002Fcommands\u002Fdashboard-server-health.md",{"path":148,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":149,"sourceHtmlUrl":150},"commands\u002Fdashboard-server-tunnel-off.md",557,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002Fcommands\u002Fdashboard-server-tunnel-off.md",{"path":152,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":153,"sourceHtmlUrl":154},"commands\u002Fdashboard-server-tunnel-on.md",549,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002Fcommands\u002Fdashboard-server-tunnel-on.md",{"path":156,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":157,"sourceHtmlUrl":158},"commands\u002Fdashboard-server-tunnel-status.md",213,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002Fcommands\u002Fdashboard-server-tunnel-status.md",{"path":160,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":93,"sourceHtmlUrl":161},"commands\u002Fdashboard-session-abort-all.md","https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002Fcommands\u002Fdashboard-session-abort-all.md",{"path":163,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":164,"sourceHtmlUrl":165},"commands\u002Fdashboard-session-abort.md",500,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002Fcommands\u002Fdashboard-session-abort.md",{"path":167,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":168,"sourceHtmlUrl":169},"commands\u002Fdashboard-session-diff.md",599,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002Fcommands\u002Fdashboard-session-diff.md",{"path":171,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":172,"sourceHtmlUrl":173},"commands\u002Fdashboard-session-fork.md",481,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002Fcommands\u002Fdashboard-session-fork.md",{"path":175,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":176,"sourceHtmlUrl":177},"commands\u002Fdashboard-session-hide.md",467,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002Fcommands\u002Fdashboard-session-hide.md",{"path":179,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":180,"sourceHtmlUrl":181},"commands\u002Fdashboard-session-info.md",456,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002Fcommands\u002Fdashboard-session-info.md",{"path":183,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":184,"sourceHtmlUrl":185},"commands\u002Fdashboard-session-kill.md",541,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002Fcommands\u002Fdashboard-session-kill.md",{"path":187,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":188,"sourceHtmlUrl":189},"commands\u002Fdashboard-session-list-active.md",279,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002Fcommands\u002Fdashboard-session-list-active.md",{"path":191,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":192,"sourceHtmlUrl":193},"commands\u002Fdashboard-session-list-here.md",281,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002Fcommands\u002Fdashboard-session-list-here.md",{"path":195,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":196,"sourceHtmlUrl":197},"commands\u002Fdashboard-session-list.md",231,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002Fcommands\u002Fdashboard-session-list.md",{"path":199,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":200,"sourceHtmlUrl":201},"commands\u002Fdashboard-session-model.md",570,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002Fcommands\u002Fdashboard-session-model.md",{"path":203,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":204,"sourceHtmlUrl":205},"commands\u002Fdashboard-session-rename.md",495,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002Fcommands\u002Fdashboard-session-rename.md",{"path":207,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":208,"sourceHtmlUrl":209},"commands\u002Fdashboard-session-resume.md",461,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002Fcommands\u002Fdashboard-session-resume.md",{"path":211,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":212,"sourceHtmlUrl":213},"commands\u002Fdashboard-session-spawn.md",904,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002Fcommands\u002Fdashboard-session-spawn.md",{"path":215,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":216,"sourceHtmlUrl":217},"commands\u002Fdashboard-session-tell.md",537,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002Fcommands\u002Fdashboard-session-tell.md",{"path":219,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":220,"sourceHtmlUrl":221},"commands\u002Fdashboard-session-thinking.md",513,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002Fcommands\u002Fdashboard-session-thinking.md",{"path":223,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":224,"sourceHtmlUrl":225},"commands\u002Fdashboard-session-unhide.md",465,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002Fcommands\u002Fdashboard-session-unhide.md",{"path":227,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":228,"sourceHtmlUrl":229},"commands\u002FREADME.md",1679,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002Fcommands\u002FREADME.md",{"path":231,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":232,"sourceHtmlUrl":233},"references\u002Fapi-reference.agent.md",7687,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002Freferences\u002Fapi-reference.agent.md",{"path":235,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":236,"sourceHtmlUrl":237},"references\u002Fapi-reference.md",23618,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002Freferences\u002Fapi-reference.md",{"path":239,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":240,"sourceHtmlUrl":241},"references\u002Frecipes.md",8107,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002Freferences\u002Frecipes.md",{"path":243,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":244,"sourceHtmlUrl":245},"references\u002Fslash-commands.md",4399,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002Freferences\u002Fslash-commands.md",{"path":247,"resourceType":248,"resourceTypeDesc":249,"sizeBytes":250,"sourceHtmlUrl":251},"scripts\u002Fdashboard-api.sh","SCRIPT","脚本",4569,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002Fscripts\u002Fdashboard-api.sh",{"path":253,"resourceType":248,"resourceTypeDesc":249,"sizeBytes":254,"sourceHtmlUrl":255},"scripts\u002Fdashboard-bus.ts",9584,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002Fscripts\u002Fdashboard-bus.ts",{"path":257,"resourceType":248,"resourceTypeDesc":249,"sizeBytes":258,"sourceHtmlUrl":259},"scripts\u002Flocal-proof.ts",1553,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002Fscripts\u002Flocal-proof.ts",{"path":261,"resourceType":248,"resourceTypeDesc":249,"sizeBytes":262,"sourceHtmlUrl":263},"scripts\u002Fspawn-command.ts",1618,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fextension\u002F.pi\u002Fskills\u002Fpi-dashboard\u002Fscripts\u002Fspawn-command.ts",[265,295,322,344,368,392],{"skillNo":266,"name":267,"nameZh":6,"description":268,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":269,"categories":270,"keywords":274,"publishedAt":54},"01M6HQYQ5B82AM5T9Y299S9CFY","youtube-srt","Download YouTube subtitles (SRT + timestamped TXT) for a channel, playlist or video via yt-dlp, no media download; optionally mine them into a categorized catalog (e.g. AI models by function, open weights, local runnability, hardware tier). Use on \"download the srt of this video\", \"transcripts of channel X for the last N months\", \"catalog the models AI Search talked about\", \"update docs\u002Fmodels\".","https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fvideo-transcription\u002F.pi\u002Fskills\u002Fyoutube-srt\u002FSKILL.md",[271],{"categoryNo":272,"categoryName":273,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体",[275,276,277,278,279,280,281,282,283,284,285,38,286,287,288,289,290,291,292,293,294],"youtube","srt","youtube srt","update","search","subtitles","dlp","Video","Media","open","catalog","update docs","yt-dlp","local","mine","via","ai models","last","for","media download",{"skillNo":296,"name":297,"nameZh":6,"description":298,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":299,"categories":300,"keywords":303,"publishedAt":54},"01M6HQYJBKSXR55T5RSYNJQG4D","video-transcription","Transcribe video and audio files to SRT subtitles with speaker diarization using the Soniox (default) or AssemblyAI API. Use when the user wants to transcribe meetings, videos, or audio files. Supports MKV, MP4, MOV, M4A, MP3. Triggers on \"\u002Ftranscribe\", \"transcribe my meetings\", \"transcribe videos in ~\u002FMovies\", or any request to convert audio\u002Fvideo to text.","https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fvideo-transcription\u002F.pi\u002Fskills\u002Fvideo-transcription\u002FSKILL.md",[301,302],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":272,"categoryName":273,"taxonomyType":21,"taxonomyTypeDesc":22},[282,304,305,306,280,47,307,308,309,310,311,38,312,313,314,315,316,317,318,276,319,320,321,35],"transcription","video transcription","transcribe","Audio","convert","mp4","text","meetings","files","default","mp3","triggers","with","videos","assemblyai","my","srt subtitles","request",{"skillNo":323,"name":324,"nameZh":6,"description":325,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":326,"categories":327,"keywords":328,"publishedAt":54},"01M6HQYECMVDC5TDHHW22VC5RX","speaker-id","Name anonymous diarized SRT speakers from a persistent local voiceprint library and repair speaker drift; local, CPU-only, no API key. Triggers \"who is speaker 2\", \"put names on the transcript\", \"label the meeting SRT\", \"the diarization split one person into three\", \"enroll my voice\". Backed by the pi-voiceid CLI.","https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fvideo-transcription\u002F.pi\u002Fskills\u002Fspeaker-id\u002FSKILL.md",[],[329,330,331,332,47,333,32,334,335,336,337,288,315,338,339,340,341,276,342,343],"id","speaker id","cli","transcript","voice","only","three","drift","repair","name","CPU","meeting","anonymous","split","person",{"skillNo":345,"name":346,"nameZh":6,"description":347,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":348,"categories":349,"keywords":353,"publishedAt":54},"01M6HQYAZWDXE9QJEG592E5PXK","veo-showreel-production-kit","Turn a video timeline + voiceover into a reproducible, sliceable Veo 3.1 prompt package with a consistency anchor and AI storyboard sketches.","https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fvideo-production\u002F.pi\u002Fskills\u002Fveo-showreel-production-kit\u002FSKILL.md",[350],{"categoryNo":351,"categoryName":352,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[354,355,356,357,358,359,360,282,361,362,363,364,316,365,366,367],"Production","veo","kit","veo showreel production kit","package","Reproducible","timeline","prompt","voiceover","storyboard","anchor","consistency","veo 3","2026",{"skillNo":369,"name":370,"nameZh":6,"description":371,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":372,"categories":373,"keywords":376,"publishedAt":54},"01M6HQY6TJ0X1ADDKYPMVJY6NV","veo-generator","Render a scripted video project into mp4 clips with the Google Veo 3.1 API. Reads a project's shot package (shots\u002F*.md), one clip per camera cut, reusing each shot's prompt and sketch — world anchor only with `--with-reference`, seed unless `--no-seed`. Use on \"render the Veo video for \u003Cproject>\", \"generate the videos from the shot scripts\", \"make the clips with Veo\".","https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fvideo-production\u002F.pi\u002Fskills\u002Fveo-generator\u002FSKILL.md",[374,375],{"categoryNo":272,"categoryName":273,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":351,"categoryName":352,"taxonomyType":21,"taxonomyTypeDesc":22},[355,377,378,379,380,358,47,282,309,361,38,381,334,382,383,384,385,386,364,387,388,389,390,316,391,293,366],"generator","veo generator","google","generate","clip","sketch","camera","world","seed","project","cut","scripts","make","render","google veo",{"skillNo":393,"name":394,"nameZh":6,"description":395,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":396,"categories":397,"keywords":398,"publishedAt":54},"01M6HQY1K2NZJ3B2YHSJJPPVAF","hyperframes-showreel","Turn real screen and site footage into a rhythmic showreel rendered with HyperFrames: sampling, edit script, redacted clips, a generated composition, Veo only as additive FX, music edit + camera punches, delivery render and export QA. Use on \"make a showreel from these recordings\", \"build the HyperFrames video\", \"assemble the footage edit\", \"render and QA the showreel\".","https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fvideo-production\u002F.pi\u002Fskills\u002Fhyperframes-showreel\u002FSKILL.md",[],[399,400,401,282,402,403,404,38,405,406,407,334,408,409,410,411,412,390,316,413],"hyperframes","hyperframes showreel","qa","Composition","edit","generated","assemble","export","sampling","build","delivery","as","fx","screen","script"]