| name | workspace |
|---|---|
| description | Show the user the agent's work on a research project and save iterations on the user's behalf. Scaffold rendering and deploy infrastructure (Quarto today, GitHub Pages, dev container), show the rendered output, save iterations. Doesn't handle research execution (use `asta-flows`). |
| allowed-tools | Bash(which quarto) Bash(make *) Bash(quarto render *) Bash(quarto preview *) Bash(git *) Bash(gh *) Read(assets/**) Write Edit |
Manage the writing/docs side of a research project: scaffold infrastructure as needed, show the rendered work, save iterations. For managing the research task graph itself (planning, executing typed tasks), use asta-flows.
assets/DEVELOPER.md is a developer-facing template scaffolded into the user's project root (where it becomes DEVELOPER.md for humans and agents working with the project). This SKILL.md is the agent-specific procedure.
Give the user a web URL for the rendered work. Two URL sources, pick based on your context:
- Local agent (host, local dev container, or Codespace — the user can reach your port): run
make previewin the background. Pass the URL Quarto prints (localhost on host/dev container; Codespaces-forwarded URL in a Codespace). - Headless agent (no user-reachable port): push the branch (see Save), then
make deployed-urlto fetch the deployed URL from GitHub Pages CI.
git add + git commit -m "<concise message>". Don't git push without explicit user approval.
For a headless agent (the user only sees results via deployed URL):
- Bootstrap
mainif the repo is empty. On a repo with no commits, the first branch pushed becomes the default — leaving nomainto open a PR against. Check withgit ls-remote --heads origin main. If absent: prefer having the repo created with an initial commit (GitHub's "Add a README file", orgh repo create <owner>/<name> --add-readme) somainexists up front; otherwise seed it withgit push -u origin HEAD:main(legitimate — no prior state to review). - First save:
git push -u origin HEAD:<feature-branch>,gh pr create --fill, thenmake deployed-urland report the URL. - Subsequent saves:
git push,make deployed-url. - After explicit merge approval:
gh pr merge,make deployed-url.
Don't merge a PR without explicit user approval.
Add components only when needed; don't proactively offer.
| Component | When to add |
|---|---|
| Quarto build tool | Always — it's the project structure. |
| GitHub Pages deploy | When you have no user-reachable port, or the user asks for a deployed URL. |
| Dev container | User wants to avoid installing host dependencies, or wants browser-only access from another machine. See subsection for the two flows. |
Before writing any file in the steps below, check whether the target path already exists. If it does, ask the user before overwriting, or merge the asset's contents into the existing file.
- Copy
assets/_quarto.ymlto project root; fill{{TITLE}}and{{REPO_URL}}(use the canonical GitHub URL, e.g.https://github.com/{owner}/{repo}). - Create
index.qmdwithtitle:frontmatter. - Create empty
references.bib. - Copy
assets/evidence.ymlto the project root (the keyed quote store — keep it even while empty). The Makefile fetches the hover-snippet extension from this repository before each render, so do not vendorassets/_extensions/evidence/into the project. See Back claims with supporting evidence below. - Append any lines from
assets/gitignoremissing from the project's.gitignore(create it if absent; don't overwrite existing entries). - Copy
assets/Makefileto project root, andassets/quarto-check.shtoscripts/quarto-check.sh(vendored verbatim — the Makefile'schecktarget runs it; to update it later, re-copy rather than hand-edit). CI warns when the vendored copy drifts from the canonical one; on that warning, re-copy the asset. - Copy
assets/README.md; fill{{TITLE}}and{{DESCRIPTION}}from the user. - Copy
assets/DEVELOPER.mdto project root. User owns it — only update later with explicit user permission.
The scaffold fetches a small Quarto extension (_extensions/evidence/) from asta-plugins before each render rather than vendoring a copy that can drift. By default it resolves the latest published asta-plugins version tag, so projects pick up new releases automatically — the same way other asta-plugins consumers upgrade — instead of tracking the mutable main branch. Override with ASTA_PLUGINS_REF=v0.103.0 to pin a specific release, or ASTA_PLUGINS_REF=main to track the in-flight branch. The extension lets a factual claim in the prose carry the evidence backing it: the claim gets a subtle dotted underline, and hovering (or keyboard-focusing) it reveals a verbatim quote plus a body-style citation. It renders with pure CSS — so it also survives onto the what-changed diff page, where a reviewer can check each claim's backing without leaving the diff.
When you write a claim you looked up, back it: add a keyed entry to evidence.yml with the verbatim quote, its cite key (add the paper to references.bib), an optional native citeproc locator (p. 4, sec. 3.2, abstract, …), and optional provenance:. Provenance must record only observed facts: use the exact CLI subcommand (for example, asta papers snippet-search) as method, use the canonical asta:// URI returned for an indexed Asta document as url, and omit unknown fields rather than inferring a skill or producer name. Then mark the claim in the .qmd:
NatureBench has [90 tasks]{.ev key="naturebench-count"}.Only ever put a verbatim quotation in quote: — there is no paraphrase mode; state your own wording in the prose. Full field reference and design notes are in _extensions/evidence/README.md.
- Copy
assets/docs.ymlto.github/workflows/docs.yml. It's a thin stub — the build/deploy/preview machinery lives in this repo's reusable workflow (.github/workflows/workspace-quarto-site.yml), so scaffolded projects pick up fixes without re-copying. Project-specific quality gates go in the project'smake checktarget, which the reusable workflow calls. When updating an existing project to this stub, update itsMakefilein the same change (the workflow requires achecktarget), and update any branch-protection required-check names to the new contexts (the build check is now reported asdocs / build) — viagh apiif the token has admin on the repo, otherwise ask the user. - Configure Pages to serve from
gh-pages:gh api repos/{owner}/{repo}/pages -X POST --input - <<'EOF' {"build_type":"legacy","source":{"branch":"gh-pages","path":"/"}} EOF
On every PR the workflow publishes a full rendered preview under
<pages>/pr-preview/pr-<N>/ and a what-changed.html beside it. The latter
highlights rendered additions and removals against the deployed base site and
collapses unchanged sections. The single preview comment links to the changes
first and the full preview second, so reviewers can inspect the affected
content directly.
Copy assets/devcontainer.json to .devcontainer/devcontainer.json, then pick the flow that matches the user's intent:
- Local container (working on their machine without installs): run
make devto open VS Code attached to the local container. - Codespaces (browser-based access from anywhere): commit, push to a GitHub remote (creating one if needed), then
gh codespace createand give the user the URL.