From 3c00b46a83c3e64f95d355655ff987feb2906496 Mon Sep 17 00:00:00 2001 From: Dickson Tsai Date: Fri, 19 Jun 2026 00:24:35 +0000 Subject: [PATCH] Add project-artifact plugin: living project status pages published as artifacts --- .claude-plugin/marketplace.json | 11 + .../.claude-plugin/plugin.json | 8 + plugins/project-artifact/LICENSE | 202 ++++++++++++ plugins/project-artifact/README.md | 98 ++++++ .../skills/project-artifact/SKILL.md | 255 +++++++++++++++ .../skills/project-artifact/swe.md | 89 ++++++ .../skills/project-artifact/template.html | 294 ++++++++++++++++++ 7 files changed, 957 insertions(+) create mode 100644 plugins/project-artifact/.claude-plugin/plugin.json create mode 100644 plugins/project-artifact/LICENSE create mode 100644 plugins/project-artifact/README.md create mode 100644 plugins/project-artifact/skills/project-artifact/SKILL.md create mode 100644 plugins/project-artifact/skills/project-artifact/swe.md create mode 100644 plugins/project-artifact/skills/project-artifact/template.html diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 74b8cfb..ba3a674 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -2179,6 +2179,17 @@ }, "homepage": "https://prisma.io" }, + { + "name": "project-artifact", + "description": "Generate and publish a living project status page — overview & success criteria, the workstream sequence, and next steps — as a shareable claude.ai artifact backed by a per-project config, so refreshes re-gather live state, redeploy the same URL, and report only the delta.", + "author": { + "name": "Anthropic", + "email": "support@anthropic.com" + }, + "source": "./plugins/project-artifact", + "category": "productivity", + "homepage": "https://github.com/anthropics/claude-plugins-public/tree/main/plugins/project-artifact" + }, { "name": "pydantic-ai", "description": "Write accurate Pydantic AI code from the start. Up-to-date patterns, decision trees, and common gotchas for agents, tools, structured output, streaming, and multi-agent apps.", diff --git a/plugins/project-artifact/.claude-plugin/plugin.json b/plugins/project-artifact/.claude-plugin/plugin.json new file mode 100644 index 0000000..72a3b77 --- /dev/null +++ b/plugins/project-artifact/.claude-plugin/plugin.json @@ -0,0 +1,8 @@ +{ + "name": "project-artifact", + "description": "Generate and publish a project status artifact — an opinionated, tabbed status page (overview & success criteria, the workstream sequence, next steps, plus background / plan / risks & open questions / decisions-FAQ when they earn a tab) published via the built-in Artifact tool to a default-private claude.ai page the user can share with teammates. Each artifact is backed by a per-project config, so 'refresh the artifact' re-gathers live state, redeploys the same URL, and reports only the delta. Domain-neutral, with a software specialization for projects whose workstreams are pull requests. Needs the built-in Artifact tool (claude.ai login).", + "author": { + "name": "Anthropic", + "email": "support@anthropic.com" + } +} diff --git a/plugins/project-artifact/LICENSE b/plugins/project-artifact/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/plugins/project-artifact/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/plugins/project-artifact/README.md b/plugins/project-artifact/README.md new file mode 100644 index 0000000..70b0455 --- /dev/null +++ b/plugins/project-artifact/README.md @@ -0,0 +1,98 @@ +# project-artifact + +`/project-artifact` generates and publishes an opinionated, tabbed status page that +represents a project too big for one update — a software migration, a research effort, a +launch, an org initiative; anything with a set of parallel/dependent workstreams tracked +over time. It produces one self-contained HTML file (no build, no external dependencies +beyond a tiny tab-switching `` can't terminate the block and run as script on the + published page. + +## Reading an existing artifact page + +**`claude.ai/code/artifact/...`** — use WebFetch with the URL; it returns the page HTML. +This works for artifacts the user owns or that have been shared with them — anything else +404s (unauthorized and nonexistent are indistinguishable by design). If it 404s, ask the +owner to share it, or work from the project's underlying source (repo/PRs/design doc) +instead of the rendered page. + +## Tab catalog (domain-neutral) + +Use only the tabs with real content; order matters (readers go top to bottom). + +| Tab | Include when | Goes in it | +|---|---|---| +| **Overview** | always | What this project is, why it exists, who's involved. The motivation can be light — a single line, or skipped — when the goal is self-evident; don't pad an obvious "why" into paragraphs. **Success criteria** — each with a *check* (how you'd know it's met) and a status; **group them when they span distinct concerns** (e.g. product vs security vs perf, or must-have vs nice-to-have — sub-tables or sub-headings), one flat table when there's only a handful. A short **Out of scope** list bounds the reader's worry. | +| **Workstreams** (a.k.a. Sequence / Milestones) | always | The headline table — one row per workstream: `id · what · owner · status` (+ dates), status pills — **plus** the current state at a glance (what's done, what's in flight, what's blocked; this is *not* a separate tab). If the order doesn't make dependencies obvious, add an "after ``" note in the row — don't draw a diagram. For each workstream worth detail, a block: what's done, how it was verified/validated, links. (Software: this is the PR sequence — see `swe.md` for the X.Y numbering, which already encodes the dependencies, and the per-PR block. A very high-churn project can split a separate changelog tab.) | +| **Attention** (a.k.a. Waiting on) | the artifact is refreshed regularly and drives action, not just orientation | Three short lists, action first. **Waiting on the owner**: numbered, priority order, each item the exact action (a paste-ready message or a one-word decision) plus one sentence on what it unblocks. **Automatic once those land**: the chain that needs no action (auto-merge cascades, deploys, tracker auto-close). **Waiting on others**: who · what · which item (linked) · where to nudge. Skip it on a one-shot overview page. (The next-steps strip under the banner always carries the top of these — see Conventions.) | +| **Background / Concepts** | the project isn't self-explanatory | The context a newcomer needs before the rest makes sense — prior work, the problem, the key ideas/vocabulary. The "what a colleague would tell you over coffee" version; link forward to a deep-dive tab if there is one. Skip it when the project is simple/obvious. | +| **Plan / Approach** | the *how* is non-obvious | The strategy — the phases, the sequencing rationale, why this shape and not another. Skip it when the plan is just "do the workstreams in order". | +| **Risks & open questions** | there are real ones | Risk register (`risk · likelihood/impact · mitigation · owner`) **plus** the unresolved questions the project hasn't answered yet. Include the ones the team already knows about — the honest caveats build trust. A low-risk project with no open questions can drop this. | +| **Decisions / FAQ** | people keep asking | The questions people actually ask, and the decisions made + rationale. "Why this approach?", "Why not X?", "What does done look like?" | + +## Conventions (all domains) + +- **Status banner at the top**, above the tabs, one line: phase · the lead workstream · + a couple of size/health numbers · any gate. It's the first thing the reader needs. +- **Next steps directly under the banner** (the template's `.next` strip), above the tabs + so it's visible whichever tab is open. 1–3 items, most important first, each + `who → the exact action → what it unblocks` — the concrete moves that take the project + from its current state to the next one, not a restatement of the remaining workstreams. + The strip is a collapsible `
`: always ship it open, and keep the item + count in its `` so a reader who collapses it still sees how much is pending + (when the body is the one-line fallback, the summary count reads "none pending"). + Nothing pending? Keep the strip and say so in one line ("No action needed — …", naming + whatever ambient work remains) rather than deleting it — "there is no next step" is + itself the answer the reader came for. The strip stands on its own: it appears whether + or not the page has an Attention tab; when that tab is present it holds the full + waiting-on lists and the strip is their top. When no human owner is recorded, name + whatever actor exists (the PR's author or reviewers, the owning team) rather than + inventing one. +- **Status pills, not prose**, in tables: `done` / `in progress` / `next` / `blocked` / + `⚠ caveat`. Define the classes in CSS once (template has them). +- **Keep section/tab ids stable across redeploys** (the template's `over`, `work`, `att`, + … ids) — the next refresh edits the previous render in place and keys off them. +- **Self-contained — the CSP enforces it.** The Artifact page is served under a strict CSP + that blocks requests to *any* external host: CDN scripts, external stylesheets, web + fonts, remote images, fetch/XHR. Blocked resources don't error — the page just renders + without them. Inline all CSS, embed any image as a `data:` URI; one small ` + + + + +