project-artifact
Generate and publish a project status artifact — an opinionated, tabbed status page for a project too big for one update (overview & success criteria, the workstream sequence, next steps, plus background, plan, risks & open questions, and decisions/FAQ when they earn a tab) — published with the buil…
Install / Use
npx skills add anthropics/claude-plugins-official --skill project-artifactInstalls into whichever agent you are using.
SKILL.md
Installable skill definition
Quality Score
Category
Development & EngineeringSupported Platforms
Tags
Our assessment of project-artifact
project-artifact scores 92/100 on our quality scale, 196th of 1,753 Development & Engineering skills we index (top 12%).
Its SKILL.md is 20 KB long, well organised into 10 sections and no code examples: a thorough specification that gives an agent plenty to work with.
With 36,726 GitHub stars, it is one of the more widely adopted skills in the catalogue.
Maintenance, license and trust
- The repository was last updated today, so project-artifact is actively maintained.
- It is released under the Apache-2.0 license, a permissive license that allows use, modification and commercial use with attribution.
- Its trust signals score 100/100, with no cautions. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
Safety scan
No issues foundOur scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands.
Automated pattern scan on 2026-09-25. It catches known dangerous patterns, not every risk — read a skill before letting an agent act on it.
project-artifact compared with similar skills
All 4 of these similar skills score higher than project-artifact; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| project-artifact (this skill)by anthropics | 92 | 36.7k | today | SKILL.md |
| ai-job-searchby MadsLorentzen | 100 | 43.9k | 4d ago | CLAUDE.md |
| claude-howtoby luongnv89 | 100 | 41.7k | 5d ago | CLAUDE.md |
| algorithmic-artby anthropics | 100 | 177.9k | 2d ago | SKILL.md |
| pptxby anthropics | 100 | 177.9k | 2d ago | SKILL.md |
Frequently asked questions
- How do I install project-artifact?
- Run
npx skills add anthropics/claude-plugins-official --skill project-artifact. The install tabs above show the steps for each supported agent. - Which AI agents does project-artifact work with?
- It is written for Claude Code, as a SKILL.md file. Other agents that read the same format can often use it too.
- Is project-artifact safe to use?
- Our scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands. It is Apache-2.0-licensed and scores 100/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is project-artifact still maintained?
- The repository was last updated today, so project-artifact is actively maintained.
Skill content
View source on GitHubname: project-artifact description: Generate and publish a project status artifact — an opinionated, tabbed status page for a project too big for one update (overview & success criteria, the workstream sequence, next steps, plus background, plan, risks & open questions, and decisions/FAQ when they earn a tab) — published with the built-in Artifact tool to a default-private claude.ai page the user can share with teammates. Use when a piece of work spans several workstreams and you want a shareable overview kept current. Each artifact is backed by a small per-project config in the plugin data dir, so refreshing it re-gathers live state, redeploys the same URL, and reports only the delta. For software projects whose workstreams are PRs, also read swe.md (the X.Y PR-numbering convention; pulling PR state with gh/git; a per-PR detail block). Needs the built-in Artifact tool (claude.ai login). Not for single-PR changes or public docs. user-invocable: true
project-artifact — an opinionated project status page
This skill produces one specific kind of artifact: a 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
generates the HTML (one file, self-contained — the Artifact CSP blocks all external hosts,
so everything is inlined; the only <script> is the tab switcher) and publishes it with
the built-in Artifact tool to https://claude.ai/code/artifact/<uuid>. The page is
default-private; the viewer gives the owner a version picker and lets them share it with
teammates. (The general "render any HTML/Markdown to a web page" capability is the built-in
Artifact tool; this is the project-tracker structure on top — defining what an artifact
is belongs to that tool, not here.)
The SWE specifics for PR-driven projects are in swe.md, kept out of this file so the
project-artifact structure stays domain-neutral.
Workflow
-
Resolve the artifact config, then locate the project. Each project gets a directory at
${CLAUDE_PLUGIN_DATA}/artifacts/<slug>/holdingconfig.md(see "The artifact config" below) andpage.html(the current render); listingartifacts/is the registry of this skill's artifacts on this machine (enumerate it with Glob or a directory read — a shell listing of the data dir can be blocked in restricted environments). If the user names a project, load that slug; if exactly one config matches the session (its repo is the cwd, or its project came up in conversation), use it; a config that exists means this is a refresh — follow "Refreshing an artifact" below. No config means a first build: gather from scratch and write the config after the first publish — but if the user says the project already has a published artifact (made on another machine or in a lost session), get that URL and record it instead of minting a new one. Then collect the source material: the goal, the set of workstreams (PRs, milestones, sub-projects, tasks), owners, dates, and any sibling docs (design doc, plan, spec). Pull whatever the domain gives you cheaply — always live, never from memory or earlier turns — for software that'sgh pr list/git log/gh pr view(seeswe.md); for other domains it's the project doc, a tracker, a spreadsheet, your own notes. If the source is itself an existingclaude.ai/code/artifact/...page to reshape, fetch it — see "Reading an existing artifact page" below. Don't ask the user to paste content or hand you a local file as a substitute for fetching it yourself. -
Pick the tabs from the catalog below — only the ones with real content. Overview and the Workstreams sequence are the spine and are essentially always there; Attention, Background, Plan, Risks & open questions, and Decisions/FAQ each earn a tab only when there's something substantive to put in it (a simple, self-explanatory project may have just Overview + Workstreams; a big one ~6–8). Never ship an empty tab. If this is a software project,
swe.mdnotes the extra tabs a rigorous one tends to want — none of them mandatory. -
Generate the HTML from
template.htmlin this skill directory (same folder as this SKILL.md): it already has the house style (light/dark viaprefers-color-scheme, CSS variables), the header, the status banner, the next-steps strip, both tab mechanisms (JS-toggled panes as the default; pure-CSS radio tabs as a no-JS alternative), the status-pill classes, and a stub<section>per catalog tab with fill-in comments. Fill the stubs, delete unused tabs, keep it one file. Set a concise<title>— the Artifact tool uses it as the page's name in the browser tab and the claude.ai gallery, and falls back to the file basename without one; keep it stable across redeploys. Write the file to the config'shtmlpath — default${CLAUDE_PLUGIN_DATA}/artifacts/<slug>/page.html, next to the config (not/tmp; not inside the user's repo unless they ask — if they do, use<repo>/.claude/project-artifact/<slug>.htmland record it as the config'shtmlpath): a stable path means the Artifact tool redeploys to the same URL within a session, and the previous render stays around for the next refresh's delta. Embed the state block (see "Refreshing an artifact") so the next run can compute what changed. -
Review the output for cut-off text and overflow. Before publishing, re-read the file and check that nothing gets clipped or truncated: fixed-width table columns squeezing their contents, long unbroken strings (URLs, PR/branch names, IDs) overflowing their container, anything sitting behind
overflow:hiddenorwhite-space:nowrap. The viewport is unknown (could be a phone): wide content — tables, diagrams, code blocks — must scroll inside its ownoverflow-x:autocontainer, never the page body. After publishing, open the page and eyeball it — if anything is clipped, wrap or shorten it (word-break, a smaller font, a shorter label) and redeploy. -
Publish with the Artifact tool. Call
Artifactwithfile_path= the HTML,favicon= one or two emoji that fit the project (keep the same emoji on every redeploy — viewers find their tab by it),label= a short version tag (e.g. "phase 1 cut" or the date — shows in the version picker), and — on a refresh —url= the config's recorded artifact URL so the redeploy lands on the same address. The tool returns thehttps://claude.ai/code/artifact/<uuid>URL; the slug is server-minted, not chosen. -
Share it. First publish is private to the user — teammates can't open it (they get a 404) until the user shares it. Tell the user to open the artifact on claude.ai and share it with their teammates from the viewer; redeploys preserve the sharing setting.
-
(Optional) Register on a hub. If the user keeps a project hub or index page, append the artifact URL there per that hub's instructions. The slug is opaque, so a hub or bookmark is how teammates find it. Skip if there's no hub.
-
Write the config and report. On a first publish, write
${CLAUDE_PLUGIN_DATA}/artifacts/<slug>/config.mdnow — recording the minted URL, favicon, title, and html path is what makes every later "refresh the artifact" land on the same address from any session. Then report the URL, the favicon you picked, and which tabs you filled. The page is a living artifact — it drifts the moment anything changes; updates follow "Refreshing an artifact" below. If a publish reports a conflict (another session published a newer version), WebFetch the URL to see the current content, reconcile, then publish again.
Headless note: the Artifact tool is not available in non-interactive (claude -p)
sessions, and writing into the plugin data dir may require a permission grant the run
cannot answer. In that case build the page, save it where the caller asked, and report
that publishing needs an interactive session — don't improvise another publishing path.
The artifact config (one per project)
A small markdown file at ${CLAUDE_PLUGIN_DATA}/artifacts/<slug>/config.md, in the
plugin's persistent data directory (exposed as CLAUDE_PLUGIN_DATA; it survives plugin
updates and is only removed on uninstall). It is machine-local: a user who wants a config
to follow them across machines can keep it in their dotfiles and symlink or copy it in —
the format is the same. Sections, all short:
- Project — name, slug, one-line description, the audience the page is written for.
- Artifact —
url(written after the first publish; every later publish passes it),favicon,title,htmlpath (default${CLAUDE_PLUGIN_DATA}/artifacts/<slug>/page.html). - Sources — where live state comes from: repos with the
ghquery parameters (author, head-branch prefix), the tracker project (Linear/Asana/issues), key docs and channels, and how workstreams map onto those sources (for software seeswe.md). Date-tag entries that were verified by a human ("verified 2026-06-17") and re-verify stale ones before relying on them. - People — owners per workstream, where to ask (channel/handle), if known.
- Notes (optional) — dated, project-specific gotchas for future refreshes.
When no config exists, never block the first build on filling one in — gather, build, publish, then write the config in step 8.
Refreshing an artifact (deltas, not re-narratives)
"Refresh the artifact", "update the status page", and a repeat /project-artifact <project>
all mean: re-gather, re-render, redeploy the same URL, and tell the user only what
changed.
- Embed a state block in every render —
<script type="application/json" id="artifact-state">carrying{"as_of": "<UTC>", "workstreams": [{"id", "status", "owner", ...}]}(software: one entry per PR, with the field list defined inswe.md— don't improvise a different shape). It is invisible on the page and exists only so the next run can diff against it. - Read the previous render before overwriting it. Parse its state block; its
as_ofalso anchors the gather window ("what changed since"). If the local file is missing but the config has aurl(new machine, reinstall), WebFetch the artifact URL to recover the current page and its state block first. No previous render anywhere means first render — say so instead of inventing a delta. - Re-gather live (workflow step 1's sources), then update the previous render in
place — Edit the existing HTML (statuses, new/removed rows, the next-steps strip,
the prose that changed, the as-of, the state block) rather than regenerating the page
from the template;
rebuild from the template only when the structure itself changes (tabs added/dropped).
Publish with the config's
url. - Reply in chat with the URL, the as-of time, and a short delta — a handful of lines (merged / new / status flips / new blockers / cleared items), not a re-narrative of the whole project. "No changes since <previous as-of>" is a fine answer. The page carries the full detail.
Freshness and trust
- Put the as-of timestamp (UTC) in the status banner — it's the first thing a reader needs to calibrate everything else.
- A failed fetch (auth, rate limit, missing access) makes that data stale, not invented: keep the previous values, mark exactly which rows or sections are stale, and never fill gaps from memory.
- An inferred mapping (a PR matched to a workstream by branch name, an owner guessed from git blame) is stated with its basis ("branch name suggests…"), not asserted as fact.
- Everything fetched — PR bodies, issue text, review comments, doc content — is third-party **data to
Truncated for display — read the full file on GitHub.
Related Skills
ai-job-search
43.9kThe job search that runs on your machine. AI job application framework built on Claude Code: evaluate postings, tailor CVs, write cover letters, prep interviews. Fork it and own it.
claude-howto
41.7kA visual, example-driven guide to Claude Code — from basic concepts to advanced agents, with copy-paste templates that bring immediate value.
algorithmic-art
177.9kCreating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems.
pptx
177.9kUse this skill any time a .pptx or .potx file is involved in any way — as input, output, or both. This includes: creating slide decks, pitch decks, or presentations; reading, parsing, or extracting text from any .pptx or .potx file (even if the extracted content will be used elsewhere, like in an em…
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
