{"id":27140,"plugin_id":"plugin_asdk_app_6abff028aac08191a6b14836de724ac5","kind":"skill","collection_source":"plugin_package","comparison_source":null,"observed_at":"2026-10-06T18:05:19.878Z","digest":"5b9c70be5cfc85e9feddaf44344f562352ffce6e9fc47daac5106b96088e3595","against":null,"payload":{"description":"Publish what your agent just produced as a private web page, shareable with anyone who has the link. Use right after a run produces a report, audit, analysis, or a dashboard the agent built on demand, the kind that reads better in a browser than dumped in the chat, and the user wants a link to send to colleagues with no account or workspace required. Fits the throwaway, on-demand dashboard pattern (gather the data, render the HTML, share a private link that expires on its own) as well as longer run reports. Produces a page in the Agent run report shape (KPI header, findings, recommended order), keeps it unlisted with a sensible default expiry, and is built to be refreshed in place on re-run.","included_files":[],"name":"stacktree-agent-run-report","skill_md_contents":"---\nname: stacktree-agent-run-report\ndescription: 'Publish what your agent just produced as a private web page, shareable with anyone who has the link. Use right after a run produces a report, audit, analysis, or a dashboard the agent built on demand, the kind that reads better in a browser than dumped in the chat, and the user wants a link to send to colleagues with no account or workspace required. Fits the throwaway, on-demand dashboard pattern (gather the data, render the HTML, share a private link that expires on its own) as well as longer run reports. Produces a page in the Agent run report shape (KPI header, findings, recommended order), keeps it unlisted with a sensible default expiry, and is built to be refreshed in place on re-run.'\n---\n\n# stacktree-agent-run-report\n\nPublish a report or dashboard your agent just generated to **stacktr.ee** and return\na private URL, so it is read in a browser and shareable with anyone, instead of\nscrolling a wall of text in the chat. This is the publish path for the\n`agent-run-report` job.\n\n## When to invoke\n\n- A run just produced a long-form report, audit, analysis, or dashboard that is\n  genuinely better as a styled page than as inline text.\n- The user wants a link they can forward to colleagues who have no Stacktree account\n  and no access to the workspace the agent ran in.\n- The user says \"publish what you just did\", \"give me a link to this\", or \"put this\n  somewhere I can look at it\".\n- The user is following the build-it-then-throw-it-away pattern: rather than maintain a\n  standing dashboard, the agent gathers the data and renders a single-use HTML view to\n  answer one question right now. This skill is the publish step, and the expiry is what\n  makes the page genuinely disposable.\n\nFor a deliverable headed to a named external client, use\n`stacktree-deliverable` (it adds recipient gating). For a dated digest on a\nschedule, use `stacktree-daily-brief`. For a public health page, use\n`stacktree-status-dashboard`.\n\n## The page shape\n\nProduce a self-contained HTML document in the Agent run report shape: a `.sheet`\nwith a `.topbar` (\"Run report\" plus a `.pill` reading \"Completed\"), an `.eyebrow`\n\"Automated by your agent\", an `<h1>`, a `.lede`, a `.meta` row (completed-at, model,\nduration), and a `.kpis` strip of three figures with the at-risk one marked\n`class=\"kpi alert\"`. Follow with `.section` blocks: Summary, Key findings\n(`<ul class=\"clean\">`), Recommended order (`<ol class=\"steps\">`), and a Notes\nsection that states the page came straight from the run and can be refreshed in\nplace at the same URL. Charts must be self-contained (inline SVG, as the template\ndoes, or a pinned CDN script, never a local file path that 404s). The canonical\nreference is the `agent-run-report` template in `apps/web/src/templates.ts`.\n\n## Account\n\nThe Stacktree tools in this plugin publish under the user's own Stacktree\naccount, so the report is listable (`list_sites`), editable and refreshable\nlater. If the tools are not connected yet, ask the user to connect Stacktree.\n\n## The judgment this skill encodes\n\n1. **It pulled in data, so the PII scan stays strict.** Reports built from tool\n   output, scraped pages, logs, or query results are the most likely to carry an\n   embedded key, a customer email, or a token. Keep `--pii-check block` (the\n   default). If it trips, do not relax it reflexively, show the user the finding. A\n   report is read later by a human who assumes it is safe; make that true first.\n\n2. **Shareable with anyone is the point, but unlisted, not public.** The job is \"no\n   account, no workspace needed to view\", which the default unlisted token already\n   delivers (the link works for anyone you send it to). Do not add a `--public-slug`\n   here, that is for the status-dashboard job. A run report is for the people the\n   user forwards it to, not for search engines. Only gate it (`set_password` /\n   `set_email_gate`) if the user says the findings are sensitive.\n\n3. **Default to a sensible expiry; offer permanence.** Most run reports are snapshots\n   (\"findings as of this run\"). The 7-day default expiry fits them. Pass\n   `--expires-never` when the user signals it is a keeper (a baseline, a reference).\n   When unsure, keep the expiry and say how to make it permanent. For a throwaway\n   dashboard built to answer one question, the expiry is the feature, not a limit: it\n   lets a single-use page remove itself instead of piling up as a dead link, which is\n   the whole reason the user stopped maintaining a standing dashboard.\n\n4. **Build it to be refreshed in place.** Re-running the task should update the same\n   URL, not mint a new one. Keep the returned `id`/slug and, on the next run, publish\n   with `--update <id-or-slug>` (or the `update_site` MCP tool). The template's own\n   copy promises this (\"Re-run the task to refresh it in place at the same URL\"), so\n   honor it.\n\n## Steps\n\n1. Build the report as a complete, self-styled HTML document in the page shape\n   above. If you only have Markdown or a fragment, wrap and style it.\n2. Decide lifecycle: snapshot (keep the 7-day default) vs keeper\n   (`--expires-never`). If the user did not say, default to snapshot and mention how\n   to keep it.\n3. Publish with `publish_html`. Pass `expires_in_hours: 'never'` for a keeper.\n   Capture the `id` and `url`.\n4. To refresh on a later run, call `update_site` with the saved `id`, so the\n   report updates in place at the same URL.\n5. Reply with the URL, when it expires (or that it is permanent), the fact that\n   anyone with the link can open it with no account, and any PII warning before the\n   user forwards it.\n\n## What to tell the user\n\nState the link, the expiry (and how to make it permanent if it is a snapshot), that\nno account or workspace is needed to view it, and the same-URL refresh path. If the\nPII scan flagged anything, say what it caught before they share.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}