# Publish

> Use when the user says a paper, review, report, or LaTeX deliverable is final and wants it archived under published/ or exposed through the static published-paper site.

- Skill: `zimoliao/publish` (Agent Skill)
- Install (CLI): `npx skillmds@latest add zimoliao/publish`
- Raw SKILL.md: https://api.skillmd.com/api/skills/zimoliao/publish/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Docs & Writing
- Author: zimoliao (https://skillmd.com/u/zimoliao)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/zimoliao/publish

---


# Published Paper Archive And Site Generation

Use this skill only after the user clearly says the deliverable is final, audited, or ready to publish. Drafts should stay under `workspace/`.

## Architecture

The publishing workflow has three separate layers:

- `scholaraio/`: upstream code and the `scholaraio publish-site` generator
- `published/`: local audited deliverable archive, git-ignored by this repository
- an optional separate GitHub Pages repository: generated static site files

Do not put user deliverables in the repository root except under `published/`, and do not commit `published/` to the ScholarAIO repo.

## Safety Gate

Before creating or changing a published archive:

1. Confirm with the user that the deliverable is final enough to archive.
2. Recommend a backup for important outputs, especially before replacing an existing archive directory.
3. Never delete source files from `workspace/`; publishing is a copy/archive step.

## Archive Layout

Use one folder per final deliverable:

```text
published/<YYYY-MM-DD>-<short-title>/
├── metadata.json
├── main.pdf
├── main.tex
├── images/
└── misc/
```

Recommended `metadata.json`:

```json
{
  "title": "Full title",
  "date": "YYYY-MM-DD",
  "keywords": ["keyword"],
  "subject": "field or topic",
  "pdf_filename": "main.pdf",
  "tex_files": ["main.tex"],
  "images_dir": "images",
  "misc_dir": "misc",
  "authors": ["Author", "Claude (AI Assistant)"],
  "note": "Final audited deliverable."
}
```

The site generator reads `published/*/metadata.json`, builds a source ZIP beside each archive, and writes a static site.

## Generate The Site

Explicit output directory:

```bash
scholaraio publish-site --out-dir ~/generated-report
```

Configured output directory:

```yaml
publish:
  site_output_dir: ~/generated-report
```

Then:

```bash
scholaraio publish-site
```

Default mode copies PDFs and source ZIPs into `assets/papers/`, producing a self-contained site suitable for a separate GitHub Pages repository.

Local preview mode uses symlinks instead of copying assets:

```bash
scholaraio publish-site --out-dir ~/generated-report --symlink
```

## Agent Behavior

- Confirm the archive folder name and metadata before writing final archive files.
- Keep metadata accurate: title, date, PDF filename, authors, subject, keywords, and note should match the actual deliverable.
- After archiving, run `scholaraio publish-site` so the static site reflects the new item.
- If the configured output directory is missing, either pass `--out-dir` or help the user set `publish.site_output_dir`.
- Treat the generated site as deployable output; if it lives in another Git repo, ask before committing or pushing there.

