Repository navigation
Pad v0.8.0
Highlights
🕸️ The dependency graph
0.8.0's headline is a full interactive knowledge graph of your workspace. A new /graph route renders every item as a node with typed edges (blocks/blocked-by, parent/child) — as both a 3D force graph and a 2D directional renderer. It's live: SSE pushes glow/pulse animations onto nodes as work happens. And it's explorable — fly-to focus with neighborhood highlighting, blocker-chain tracing lit as a path, search with collection/status/role filters, and a per-item detail drawer you can deep-link via ?graph=1. Item headers gain a Graph button that opens the drawer in place.
🚀 Launchpad onboarding, natural-language-first
Brand-new workspaces now open into a launchpad with a setup-progress checklist and an active "want me to set it up?" offer. Onboarding is natural-language-canonical end to end — skill, MCP catalog, seeded playbook bodies, web copy, and the editor/library all lead with NL invocation. Workspace intent is captured at creation to warm the onboard run, the first agent-created item gets an aha-highlight, and there's a manual escape hatch for users who skip the guided flow.
📦 Portable playbooks & conventions
Move playbooks and conventions between workspaces as Markdown + frontmatter artifacts. Full surface coverage: pad item export / pad item import CLI, pad_item MCP export/import actions, server endpoints, and a web UI for both.
♻️ Archived-item recovery
Archived items are no longer masked as "missing." They surface in-place with an archived banner, and you can restore them from the item detail page, the CLI, and MCP.
🔐 Self-host auth hardening
Localhost password recovery for locked-out self-host admins (pad auth reset-password + the loopback /auth/local-reset endpoint), server version surfaced on /auth/session, a unified single-browser-handoff first-run setup, Apple as a cloud OAuth provider, and sliding session renewal.
Thanks
Special thanks to @b4rk13 for their first contribution to Pad — fixing SQLite account-token storage (#732). 🙏
Install
# Homebrew (macOS / Linux)
brew install perpetualsoftware/tap/pad
# Docker
docker pull ghcr.io/perpetualsoftware/pad:0.8.0Or download a signed archive from the assets below.
Verifying
cosign verify-blob \
--certificate-identity-regexp "^https://github.com/PerpetualSoftware/pad/.github/workflows/release.yml@.*" \
--certificate-oidc-issuer "https://token.actions.githubusercontent.com" \
--certificate checksums.txt.pem \
--signature checksums.txt.sig \
checksums.txtChangelog
Features
- bf40cc9: feat(artifact): MCP pad_item export/import actions (#758) (@xarmian)
- 7ea552f: feat(artifact): MD+frontmatter export/import core for playbooks & conventions (#754) (@xarmian)
- 285a58e: feat(artifact): pad item export/import CLI commands (#756) (@xarmian)
- 4f0984b: feat(artifact): server export + import endpoints for playbooks & conventions (#755) (@xarmian)
- 02106a1: feat(artifact): web UI for playbook/convention export & import (#757) (@xarmian)
- 10a55d1: feat(auth): accept provider=apple in cloud oauth-login/link/unlink (TASK-1773) (#714) (@xarmian)
- 616a6d2: feat(auth): localhost password recovery for locked-out self-host admins (#760) (@xarmian)
- 14614c9: feat(auth): surface server version on /auth/session (TASK-1839) (#740) (@xarmian)
- 248f7c5: feat(items): expose item restore via CLI + MCP (TASK-1828) (#734) (@xarmian)
- 09335c4: feat(onboard): active "want me to set it up?" offer on needs_onboarding (TASK-1850) (#742) (@xarmian)
- fa8064e: feat(onboard): capture workspace intent at creation, warm the onboard run (TASK-1855) (#746) (@xarmian)
- 7962fab: feat(onboard): make natural language the canonical onboard trigger (TASK-1849) (#741) (@xarmian)
- a2827ec: feat(playbooks): NL-canonical invocation in seeded bodies + CLAUDE.md (TASK-1861) (#751) (@xarmian)
- 3c3016a: feat(server): focused neighborhood mode on workspace graph endpoint (TASK-1781) (#718) (@xarmian)
- 9322084: feat(server): workspace graph endpoint — nodes + typed edges (TASK-1731) (#699) (@xarmian)
- 7ec19b5: feat(skill): NL-canonical playbook invocation in SKILL.md + MCP catalog (TASK-1859) (#749) (@xarmian)
- db3917f: feat(web): /graph route MVP — lazy-loaded 3D force graph (TASK-1733) (#701) (@xarmian)
- 771d102: feat(web): 2D directional dependency-graph renderer (TASK-1783) (#720) (@xarmian)
- 1d62035: feat(web): NL-canonical onboarding banner copy (TASK-1851) (#743) (@xarmian)
- e056e9c: feat(web): NL-canonical playbook invocation in the editor + library (TASK-1860) (#750) (@xarmian)
- 80a939f: feat(web): aha-highlight the first agent-created item (TASK-1853) (#745) (@xarmian)
- 372d95c: feat(web): archived-item recovery on the item detail page (TASK-1829) (#735) (@xarmian)
- 2904802: feat(web): blocker-chain tracing as lit path + edge styling by type (TASK-1737) (#705) (@xarmian)
- a37fa16: feat(web): deep-link the dependency-graph drawer via ?graph=1 (TASK-1786) (#723) (@xarmian)
- 1bd3e52: feat(web): graph SSE live layer — glow/pulse on touched nodes (TASK-1736) (#704) (@xarmian)
- a20095e: feat(web): graph TS types + API client method (TASK-1732) (#700) (@xarmian)
- 1c3db43: feat(web): graph focus interaction — fly-to, neighborhood highlight, detail card (TASK-1734) (#702) (@xarmian)
- 30bdbeb: feat(web): graph layout tuning — gravity wells + terminal recede (TASK-1738) (#706) (@xarmian)
- 0234239: feat(web): graph node labels — always-on for hubs, distance-faded elsewhere (TASK-1743) (#708) (@xarmian)
- 77dcd07: feat(web): graph search fly-to + collection/status/role filters (TASK-1735) (#703) (@xarmian)
- bd16b9b: feat(web): graph view enhancements — larger drawer, node detail panel, toggleable legend, bigger cards (TASK-1787) (#724) (@xarmian)
- f45a45a: feat(web): graph.getFocused client + truncated field for focus mode (TASK-1782) (#719) (@xarmian)
- 4bd048c: feat(web): item-header Graph button + dependency-graph drawer (TASK-1784) (#721) (@xarmian)
- ac43e49: feat(web): launchpad render-mode for unset-up workspaces (TASK-1852) (#744) (@xarmian)
- 4456030: feat(web): live SSE updates in the dependency-graph drawer (TASK-1785) (#722) (@xarmian)
- 4a99f5f: feat(web): manual escape hatch on the skipped-onboarding board (TASK-1856) (#747) (@xarmian)
- 408e578: feat(web): setup-progress checklist on the launchpad (TASK-1857) (#748) (@xarmian)
- 8c8e858: feat(web): show archived banner in-place on live archive (TASK-1833) (#736) (@xarmian)
- dc8cb78: feat(web): surface Apple as a linked provider in console settings (TASK-1777) (#715) (@xarmian)
- c93f2aa: feat(web): unified mobile top bar with always-on workspace switcher (IDEA-1835) (#737) (@xarmian)
Bug fixes
- 341cbd3: fix(artifact): normalize import field map so json fields validate (BUG-1883) (#759) (@xarmian)
- 22d901c: fix(auth): unify first-run setup into one browser handoff (BUG-1843) (#739) (@xarmian)
- ba734d5: fix(editor): symmetric table cut/paste — structural row cut, TSV cell reconstruction (BUG-1247) (#712) (@xarmian)
- 99b4649: fix(items): surface archived items instead of masking them as missing (BUG-1791) (#733) (@xarmian)
- 33e4943: fix(server): non-fatal UA session binding + sliding session renewal (#727) (@xarmian)
- 03d7347: fix(store): allow NULL api_tokens.workspace_id on SQLite for account tokens (#732) (@b4rk13)
- b4e9e20: fix(web): collapse WorkspaceSheet switcher list when the sheet closes (IDEA-1720) (#711) (@xarmian)
- 35cc26d: fix(web): collection cards show real child-item progress; child-progress endpoint (BUG-1509) (#710) (@xarmian)
- eb5b2bf: fix(web): comment wikilinks resolve refs + carry username prefix (BUG-1744) (#709) (@xarmian)
- 45d032c: fix(web): graph node click/dbl-click + Open as real link (TASK-1788) (#725) (@xarmian)
- 38f18ac: fix(web): graph repaints in place instead of full-scene refresh (BUG-1742) (#707) (@xarmian)
- 62fafc4: fix(web): kanban board height accounts for workspace top bar (BUG-1844) (#738) (@xarmian)
- 00d4fe0: fix(web): quick-capture docks above bottom nav, mutually exclusive with other sheets (BUG-1765) (#713) (@xarmian)