Mole Release Notes Publisher
tw93/Mole
Publishes curated, bilingual release notes for an existing Mole version tag with gh release edit, including contributor thanks and reactions, after the release workflow finishes.
Switch persistent Spectre installs between this checkout and the public marketplace, deploy the checkout for local testing, or run the full public GitHub marketplace release workflow including…
$ npx skills add joenandez/spectre --skill release -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install joenandez/spectre release --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/joenandez/spectre.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/release .claude/skills/release && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "release" agent skill from https://github.com/joenandez/spectre/tree/main/.agents/skills/release into .claude/skills/release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/joenandez/spectre/tree/main/.agents/skills/releaseType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add joenandez/spectre --skill release -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install joenandez/spectre release --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/joenandez/spectre.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/release .agents/skills/release && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "release" agent skill from https://github.com/joenandez/spectre/tree/main/.agents/skills/release into .agents/skills/release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add joenandez/spectre --skill release -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install joenandez/spectre release --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/joenandez/spectre.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/release .cursor/skills/release && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "release" agent skill from https://github.com/joenandez/spectre/tree/main/.agents/skills/release into .cursor/skills/release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/joenandez/spectre.git --path .agents/skills/release--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add joenandez/spectre --skill release -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install joenandez/spectre release --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/joenandez/spectre.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/release .gemini/skills/release && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "release" agent skill from https://github.com/joenandez/spectre/tree/main/.agents/skills/release into .gemini/skills/release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install joenandez/spectre releaseInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add joenandez/spectre --skill release -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/joenandez/spectre.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/release .github/skills/release && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "release" agent skill from https://github.com/joenandez/spectre/tree/main/.agents/skills/release into .github/skills/release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add joenandez/spectre --skill release -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install joenandez/spectre release --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/joenandez/spectre.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/release .opencode/skills/release && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "release" agent skill from https://github.com/joenandez/spectre/tree/main/.agents/skills/release into .opencode/skills/release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
releaseSwitch persistent Spectre installs between this checkout and the public marketplace, deploy the checkout for local testing, or run the full public GitHub marketplace release workflow including…
Release is an agent skill from joenandez/spectre. Switch persistent Spectre installs between this checkout and the public marketplace, deploy the checkout for local testing, or run the full public GitHub marketplace release workflow including changelog approval, the Substack release article, and the Spectre Typefully draft. Use when asked to activate local or public Spectre, deploy or refresh local installs, release Spectre, publish a version, ship Spectre publicly, or announce a Spectre release.
Its SKILL.md is about 6.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development, covering Newsletters and Changelog and release notes. It works with GitHub, Substack and Git. The repository describes itself as: Spectre is a battle-tested 6 stage agentic engineering workflow for building complex, production-ready features. You stay in the loop for the decisions that matter. Your agents…. The licence is MIT.
4 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 931c9e8. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
codexclaudenodegitnpmghFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
spectreblog.substack.comtypefully.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Release loads about 6.5k tokens when it runs. Until then it costs about 115 tokens; SKILL.md has 2,755 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from joenandez/spectre at commit 931c9e8, republished under its MIT licence (© joenandez). 2,755 words, ~6,504 tokens.
.claude/skills/release/SKILL.md (or your agent's skills folder).Internal Spectre deployment workflow. Keep local deployment and public release as explicit, separate modes.
Supported invocations:
activate local
activate public
local
public patch
public minor
public major
public X.Y.ZTreat $ARGUMENTS as one of these forms. local is the backward-compatible alias for activate local. activate public switches installed sources but does not publish; public <version> publishes a release. If the first argument is missing or invalid, ask which mode to run. Never infer or default to a public release.
Run git status --short and inspect relevant staged and unstaged diffs.
Run:
npm run sync-codex -- --quiet
npm run sync-codex -- --check --quiet
node .agents/skills/verify-spectre/scripts/verify.mjsStop and fix any sync, test, structure, Codex, or real-CLI failure before deploying.
Never stage unrelated files or use git add -A.
activate local, local, and Public Mode's pre-release deployment activate persistent user-level installs from this checkout. These commands are deployment actions, not a handoff for the user to finish.
Before changing anything, run all four inventory commands and retain their JSON for the final source report:
codex plugin marketplace list --json
codex plugin list --json
claude plugin marketplace list --json
claude plugin list --jsonThe local and public catalogs intentionally share marketplace name spectre and plugin identity spectre@spectre; they are alternatives, not side-by-side installs. Mutate only that exact marketplace and plugin. For Claude Code, mutate only user scope. Never remove a project/local-scope declaration; stop if one shadows the requested user source or leaves another enabled spectre@spectre install.
Inspect the spectre marketplace. If absent, add this checkout. If its source is not a local path whose real path is $PWD, remove the installed plugin if present, remove only the conflicting marketplace, and add this checkout:
codex plugin remove spectre@spectre
codex plugin marketplace remove spectre
codex plugin marketplace add "$PWD"Run only the applicable commands: do not call plugin remove when the plugin is absent or marketplace remove when the marketplace is absent. Do not run codex plugin marketplace upgrade for the requested local source; Codex only upgrades Git marketplaces and reads local marketplaces directly.
A local marketplace source does not replace an installed same-version plugin. If spectre@spectre remains installed, remove its cached install, then reinstall it. If it is absent, install it directly:
codex plugin remove spectre@spectre
codex plugin add spectre@spectreRerun both Codex JSON inventory commands. Require exactly one marketplace named spectre with marketplaceSource.sourceType == "local" and a source whose real path is $PWD. Require exactly one enabled spectre@spectre entry whose marketplace source is that same local path and whose version matches plugins/spectre-codex/.codex-plugin/plugin.json.
Resolve that entry's install/cache path and run:
diff -qr "$PWD/plugins/spectre-codex" "$codex_install_path"Run the bundled managed-agent repair and compare generated agents to the active Codex agent files:
PLUGIN_ROOT="$PWD/plugins/spectre-codex" node "$PWD/plugins/spectre-codex/hooks/scripts/ensure-codex-agents.mjs" --ensure --json
for agent in "$PWD"/plugins/spectre-codex/agents/*.toml; do
diff -q "$agent" "${CODEX_HOME:-$HOME/.codex}/agents/$(basename "$agent")"
done
node bin/spectre.js doctor codex --scope user --project-dir "$PWD"Require doctor to exit successfully and report no legacy direct-install state. Treat any marketplace, install, JSON identity, version, enabled-state, byte-comparison, managed-agent comparison, or doctor failure as a failed deployment. Existing Codex sessions may need a restart before newly installed or updated custom agents are available; report that as the only remaining interactive action.
Inspect the spectre marketplace. If absent, add this checkout at user scope. If its source is not a directory whose real path is $PWD, uninstall the user plugin if present, remove only the user marketplace declaration, and add this checkout:
claude plugin uninstall spectre@spectre --scope user --keep-data --yes
claude plugin marketplace remove spectre --scope user
claude plugin marketplace add "$PWD" --scope userRun only the applicable commands. If removal exposes a project/local marketplace named spectre, stop instead of removing it.
Refresh the active local marketplace source:
claude plugin marketplace update spectreMarketplace refresh does not replace an installed same-version plugin. If spectre@spectre is installed at user scope, remove its cached install while preserving data, then reinstall it. If it is not installed, install it directly:
claude plugin uninstall spectre@spectre --scope user --keep-data --yes
claude plugin install spectre@spectre --scope userRerun both Claude JSON inventory commands. Require exactly one effective marketplace named spectre with source == "directory" and a path whose real path is $PWD. Require exactly one enabled user-scope spectre@spectre entry, no project/local-scope Spectre install, and a version matching plugins/spectre/.claude-plugin/plugin.json.
Resolve that entry's installPath and run:
diff -qr "$PWD/plugins/spectre" "$spectre_install_path"A zero exit proves the installed plugin cache contains the current checkout bytes. Treat any marketplace, install, JSON identity, version, enabled-state, or byte-comparison failure as a failed deployment.
Existing Claude Code sessions still require /reload-plugins; report that as the only remaining interactive action.
activate public switches persistent user-level installs to joenandez/spectre without creating a version, commit, tag, push, or GitHub release. It does not install from the current checkout.
Run the four inventory commands from Persistent Local Source Activation before changing anything. Apply the same exact-identity and Claude user-scope guards.
If the current spectre marketplace is absent, add joenandez/spectre. If it is not a Git marketplace normalized to https://github.com/joenandez/spectre.git, remove the installed plugin if present, remove only the conflicting marketplace, and add the public marketplace:
codex plugin remove spectre@spectre
codex plugin marketplace remove spectre
codex plugin marketplace add joenandez/spectreRun only the applicable commands. If the public marketplace is already configured, refresh it with codex plugin marketplace upgrade spectre instead of removing it.
Remove any remaining cached spectre@spectre install and reinstall it from the active marketplace:
codex plugin remove spectre@spectre
codex plugin add spectre@spectreRerun both Codex JSON inventory commands. Require exactly one marketplace named spectre, with marketplaceSource.sourceType == "git" and a source normalized to https://github.com/joenandez/spectre.git. Require exactly one enabled spectre@spectre entry tied to that marketplace.
Resolve the marketplace root, the plugin source declared by its .agents/plugins/marketplace.json, and the installed plugin source/cache path. Require the installed version to match the public marketplace and plugin manifests, then run diff -qr between the resolved marketplace plugin root and installed plugin root.
Run ensure-codex-agents.mjs --ensure --json from the resolved installed public plugin root and compare every bundled agent TOML to ${CODEX_HOME:-$HOME/.codex}/agents/. Any source, identity, enabled-state, version, byte, or managed-agent mismatch fails activation.
If the current spectre marketplace is absent, add joenandez/spectre at user scope. If it is not the GitHub marketplace joenandez/spectre, uninstall the user plugin if present, remove only the user marketplace declaration, and add the public marketplace:
claude plugin uninstall spectre@spectre --scope user --keep-data --yes
claude plugin marketplace remove spectre --scope user
claude plugin marketplace add joenandez/spectre --scope userRun only the applicable commands. If removal exposes a project/local marketplace named spectre, stop instead of removing it. If the public marketplace is already configured, refresh it with claude plugin marketplace update spectre instead of removing it.
Remove any remaining cached user install while preserving data, then reinstall it from the active marketplace:
claude plugin uninstall spectre@spectre --scope user --keep-data --yes
claude plugin install spectre@spectre --scope userRerun both Claude JSON inventory commands. Require exactly one effective marketplace named spectre, with source == "github" and repo == "joenandez/spectre". Require exactly one enabled user-scope spectre@spectre entry and no project/local-scope Spectre install.
Resolve the marketplace installLocation, the plugin source declared by its .claude-plugin/marketplace.json, and the installed entry's installPath. Require the installed version to match the public marketplace and plugin manifests, then run diff -qr between the resolved marketplace plugin root and installPath. Any source, identity, scope, enabled-state, version, or byte mismatch fails activation.
Existing Claude Code sessions require /reload-plugins; report that as the only remaining interactive action.
activate local: complete Shared Preflight, then Persistent Local Source Activation.activate public: complete Persistent Public Source Activation. Do not run checkout preflight as proof of public bytes; verify against the fetched public marketplace snapshot instead.Neither activation mode bumps versions, commits, pushes, tags, creates a GitHub release, or publishes npm. Finish with Local source active or Public source active, then report for each runtime the normalized marketplace source, installed identity/version/scope, byte-comparison result, and exact mutation commands actually executed.
local is retained as an alias for activate local. Follow Activation Mode exactly and do not present its executed commands as work the user still needs to run.
Public mode publishes a new version to GitHub for the Claude Code and Codex marketplaces. It requires patch, minor, major, or an exact X.Y.Z.
A valid public invocation authorizes the resolved version bump, commits, local tag creation, pushes, and GitHub release publication. Do not ask for separate version, tag, push, or publication confirmation. The release-notes approval in Execution step 7 is the only user approval gate before the software release completes.
A public invocation never authorizes Substack or Typefully publication. Release Communications carries its own gates.
Bump these public version surfaces in sync:
package.json -> version.claude-plugin/marketplace.json -> top-level version and plugins[0].version.agents/plugins/marketplace.json -> top-level version and plugins[0].versionplugins/spectre/.claude-plugin/plugin.json -> versionDo not edit plugins/spectre/.codex-plugin/plugin.json; that stale Claude-root Codex manifest was removed. The Codex plugin manifest is generated under plugins/spectre-codex/.codex-plugin/plugin.json.
Resolve and report current -> next; continue without a confirmation gate.
Inspect and commit relevant non-version changes first:
Complete Shared Preflight. If sync generated new plugins/spectre-codex/ changes, inspect and commit them before continuing.
Update the four Version Contract files and commit only those files with release: vX.Y.Z.
Require a clean release working tree, then run the complete release gate:
node .agents/skills/verify-spectre/scripts/verify.mjs --releaseThis must pass before creating or pushing a tag. In particular, GitHub authentication must be proven before irreversible release actions.
Complete Persistent Local Source Activation for both Codex and Claude Code from the release checkout.
Build a concise user-facing changelog from commits since the previous tag. Before drafting, use available project memory and/or agent transcripts to recover the decisions and motivations behind those changes; check every claim against the shipped diff. Explain what changed and why it matters, and do not present existing behavior as new. Write at a 12th-grade reading level: use plain, direct English and avoid internal workflow terms unless a public reader needs them. Frame automatic behavior as what the product now does for users (for example, "Execute now dispatches ready tasks to subagents in parallel regardless of plan size"), not as a capability claim such as "Execute can run tasks in parallel." Use only non-empty New, Changed, Fixed, and Removed sections. Ask the user to approve the changelog. Write the approved text to docs/changelog/vX.Y.Z.md and use it as the step 9 --notes-file source. docs/ is gitignored, so release-notes and article artifacts never dirty the release tree; never commit them.
After changelog approval, create vX.Y.Z and run:
git push
git push --tagsCreate the GitHub release:
gh release create vX.Y.Z --title "vX.Y.Z" --notes-file <changelog-file>Verify the exact public tag and GitHub release:
git ls-remote --exit-code origin refs/tags/vX.Y.Z
gh release view vX.Y.Z --json url,tagName,targetCommitishFinish with Public release complete: vX.Y.Z. Include the commit, tag, GitHub release URL, marketplace versions, checks run, the exact local activation commands executed, and the public consumer commands below.
Continue into Release Communications. Never withhold the step 11 completion line while a communications step is pending.
Run only after Public Mode's software release and its remote tag/release verification pass. Activation and Local Mode never run it.
Communications are a separate track from the software release. A blocked, deferred, or failed Substack or Typefully step never invalidates a verified release; report it separately instead of reopening the release.
A public invocation authorizes writing the article artifacts and creating one private Typefully draft. It never authorizes publication. The user owns the Substack publish action. Typefully publication requires its own explicit approval; changelog approval, a supplied Substack URL, or "editing is done" is not publication approval.
Derive a public article from the approved changelog. Keep every factual claim, and widen the framing for readers who do not follow the repository:
Write both artifacts under the gitignored docs/changelog/ directory:
docs/changelog/vX.Y.Z-substack.md as the editable source.docs/changelog/vX.Y.Z-substack.html as a self-contained rendered artifact.The HTML must use semantic headings, lists, and links, contain no local filesystem paths or secrets, and offer a Copy rich text control that writes both text/html and text/plain when the Clipboard API is available. It must stay usable through ordinary select-and-copy when clipboard access is unavailable. Validate it and keep it local:
subspace --json html-share validate docs/changelog/vX.Y.Z-substack.htmlDo not publish that artifact with html-share create.
Open the HTML artifact in a companion, then open:
https://spectreblog.substack.com/publish/postin a companion labeled Spectre Substack Editor. The user copies, edits, and publishes. Never operate Substack's publish controls. Do not claim publication until the user supplies the resulting public https://spectreblog.substack.com/p/... URL.
Before any Typefully action, load and follow the installed typefully skill at .agents/skills/typefully/. If it is missing, unauthenticated, or its CLI fails, stop the social track, report the exact failure, and leave the verified release complete.
Wait for the published Substack URL. Require an https scheme and the spectreblog.substack.com host; stop and ask when either does not match. Never invent, guess, or placeholder the article URL.
Resolve social sets live with social-sets:list; do not rely on the configured default, which points at a different identity. Select the set named Spectre and confirm its connected platforms with social-sets:get <social_set_id>. At last check that was social set 326705 (joenandez_1), connecting x as @SpectreBuild, linkedin as spectrebuild, and substack Notes. Verify those live rather than trusting them, and ask the user when the set is absent or ambiguous.
Create exactly one private, unscheduled draft titled Spectre vX.Y.Z release covering every connected platform the fetch confirmed, using a single drafts:create that passes every confirmed platform to --platform. Never create one draft per platform, and never tailor copy per platform: every platform carries identical content, and the user edits per-platform variants in Typefully. Write one short highlight blurb grounded in the changelog and ending in the published Substack URL. Keep it a single post inside the tightest connected limit — x at 280 characters — because substack Notes never take a thread.
Fetch the created draft and open its native editor URL — the private_url the API returns, or https://typefully.com/?a=<social_set_id>&d=<draft_id> when it is absent — in the user's external default browser with open "<url>". Never open the Typefully editor in a companion pane; Typefully sign-in fails in the embedded browser. Do not build a separate HTML preview; the native Typefully editor is the review and editing surface. Report that the remote draft is private and unpublished.
Then:
drafts:publish once and verify the published result.Report separately from the release completion line:
Always print the exact mutation command branch executed at the end of Activation, Local, or Public Mode as an audit record. The user does not need to rerun it. Do not print templates or branches that did not run.
Codex, one-time persistent user-level native plugin install from this checkout:
codex plugin marketplace add "$PWD"
codex plugin add spectre@spectre
PLUGIN_ROOT="$PWD/plugins/spectre-codex" node "$PWD/plugins/spectre-codex/hooks/scripts/ensure-codex-agents.mjs" --ensure --json
for agent in "$PWD"/plugins/spectre-codex/agents/*.toml; do
diff -q "$agent" "${CODEX_HOME:-$HOME/.codex}/agents/$(basename "$agent")"
done
node bin/spectre.js doctor codex --scope user --project-dir "$PWD"Codex, switch an existing public source to this checkout:
codex plugin remove spectre@spectre
codex plugin marketplace remove spectre
codex plugin marketplace add "$PWD"
codex plugin add spectre@spectreCodex, refresh an existing persistent user-level install from the configured local spectre marketplace:
codex plugin remove spectre@spectre
codex plugin add spectre@spectre
PLUGIN_ROOT="$PWD/plugins/spectre-codex" node "$PWD/plugins/spectre-codex/hooks/scripts/ensure-codex-agents.mjs" --ensure --json
for agent in "$PWD"/plugins/spectre-codex/agents/*.toml; do
diff -q "$agent" "${CODEX_HOME:-$HOME/.codex}/agents/$(basename "$agent")"
done
node bin/spectre.js doctor codex --scope user --project-dir "$PWD"Then restart an existing Codex session if newly installed or updated spectre_* custom agents are not visible yet. The remove/add is intentional: Codex's version cache can skip same-version local source changes.
Claude Code, one-time persistent user-level install from this checkout:
claude plugin marketplace add "$PWD" --scope user
claude plugin install spectre@spectre --scope userClaude Code, switch an existing public source to this checkout:
claude plugin uninstall spectre@spectre --scope user --keep-data --yes
claude plugin marketplace remove spectre --scope user
claude plugin marketplace add "$PWD" --scope user
claude plugin marketplace update spectre
claude plugin install spectre@spectre --scope userClaude Code, refresh an existing persistent user-level install from the configured local spectre directory marketplace:
claude plugin marketplace update spectre
claude plugin uninstall spectre@spectre --scope user --keep-data --yes
claude plugin install spectre@spectre --scope userThen run /reload-plugins in an existing Claude Code session. The uninstall/install is intentional: Claude's version cache can skip same-version local source changes.
Codex, one-time install from the public marketplace:
codex plugin marketplace add joenandez/spectre
codex plugin add spectre@spectreCodex, switch this checkout or another source to the public marketplace:
codex plugin remove spectre@spectre
codex plugin marketplace remove spectre
codex plugin marketplace add joenandez/spectre
codex plugin add spectre@spectreCodex, refresh an already configured public marketplace:
codex plugin marketplace upgrade spectre
codex plugin remove spectre@spectre
codex plugin add spectre@spectreClaude Code, one-time user-level install from the public marketplace:
claude plugin marketplace add joenandez/spectre --scope user
claude plugin install spectre@spectre --scope userClaude Code, switch this checkout or another user source to the public marketplace:
claude plugin uninstall spectre@spectre --scope user --keep-data --yes
claude plugin marketplace remove spectre --scope user
claude plugin marketplace add joenandez/spectre --scope user
claude plugin install spectre@spectre --scope userClaude Code, refresh an already configured public marketplace:
claude plugin marketplace update spectre
claude plugin uninstall spectre@spectre --scope user --keep-data --yes
claude plugin install spectre@spectre --scope userThen run /reload-plugins in an existing Claude Code session.
Print this section only after Public Mode completes successfully.
Codex, fresh user-level install or update from the exact published native plugin:
# Fresh install
codex plugin marketplace add joenandez/spectre
codex plugin add spectre@spectre
# Existing install
codex plugin marketplace upgrade spectre
codex plugin remove spectre@spectre
codex plugin add spectre@spectreClaude Code, fresh public install:
/plugin marketplace add joenandez/spectre
/plugin install spectre@spectreClaude Code, update an existing public install:
/plugin marketplace update spectre
/plugin update spectre@spectre
/reload-pluginstypefully skill is missing, unauthenticated, or its CLI fails: stop the social track and report it; never reopen the verified software release over it.https://spectreblog.substack.com/ link, or the Spectre social set is missing or ambiguous: stop and ask.© joenandez, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/release of joenandez/spectre.
Open the folder on GitHubat commit 931c9e8
Release next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Release this skilljoenandez/spectre | 164 | — | ~6.5k | Automated safety check: Pass | MIT | |
| Mole Release Notes Publishertw93/Mole | 70k | — | ~1.9k | Automated safety check: Pass | GPL-3.0 | |
| Draft Release Notesjamiepine/voicebox | 57k | — | ~941 | Automated safety check: Pass | MIT | |
| Release Bumpjamiepine/voicebox | 57k | — | ~1.1k | Automated safety check: Pass | MIT | |
| Verdaccio Pull Request Workflowverdaccio/verdaccio | 18k | — | ~1.9k | Automated safety check: Pass | MIT | |
| Go-Redis Release Preparationredis/go-redis | 22k | — | ~1.1k | Automated safety check: Pass | BSD-2-Clause |
tw93/Mole
Publishes curated, bilingual release notes for an existing Mole version tag with gh release edit, including contributor thanks and reactions, after the release workflow finishes.
jamiepine/voicebox
Writes or refreshes the Unreleased section of CHANGELOG.md as a themed narrative built from the commits, PRs and diff since the last version tag.
jamiepine/voicebox
Ends a release cycle by moving the Unreleased changelog notes under a dated version heading, bumping version files with bumpversion and tagging the commit.
verdaccio/verdaccio
Takes a change through a verdaccio pull request: branch, local checks, changeset, title and body, labels, CI and review rounds, and ports to other release lines.
redis/go-redis
Prepares a go-redis release locally: picks the next semver, gathers merged PRs, writes the RELEASE-NOTES entry and bumps versions, without publishing.
modem-dev/hunk
Maintainer workflow for preparing, publishing, verifying and curating Hunk releases, with confirmation gates before tags, publishes and public edits.
joenandez/spectre
A skill your agent uses when validating that the Spectre plugin itself still works after ANY change to this repo — skills, prompts, agents, hooks, the CLI, the Codex mirror, or a release.
joenandez/spectre
A skill your agent uses when modifying the Codex SPECTRE install flow, SessionStart continuity, project skill syncing, registry injection, or Codex-specific runtime files.
joenandez/spectre
Save a quiet, branch-keyed session snapshot with continuity, active work, and optional task/todo state for automatic resume.
joenandez/spectre
User-invoked front door for durable capture. An agent skill from joenandez/spectre.
joenandez/spectre
Rewrite a verbose SPECTRE skill into a compact, contract-form Spectre skill proposal — clear on WHAT, silent on HOW — grounded in the spectre-light distillation and freedom-tier budget.
joenandez/spectre
Rewrite Spectre subagent definitions into compact, contract-driven agents with clear routing, least-privilege tools, output schemas, and an auditable rewrite trail.
Categories
Switch persistent Spectre installs between this checkout and the public marketplace, deploy the checkout for local testing, or run the full public GitHub marketplace release workflow including…. Release is an agent skill from joenandez/spectre. Switch persistent Spectre installs between this checkout and the public marketplace, deploy the checkout for local testing, or run the full public GitHub marketplace release workflow including changelog approval, the Substack release article, and the Spectre Typefully draft.
Release fits situations like: asked to activate local; refresh local installs; release Spectre; publish a version.
Run `npx skills add joenandez/spectre --skill release -a claude-code`. Or copy the skill folder (.agents/skills/release in joenandez/spectre) into .claude/skills/release in your project. Claude Code loads it when a task matches its description.
Run `npx skills add joenandez/spectre --skill release -a codex`. Or copy the skill folder (.agents/skills/release in joenandez/spectre) into .agents/skills/release in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add joenandez/spectre --skill release -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/release, .gemini/skills/release, .github/skills/release and .opencode/skills/release in your project.
Going by SKILL.md and its folder, Release needs the command-line tools its instructions call (codex, claude, node, git, npm and gh).
SKILL.md names 2 domains. In commands or code: spectreblog.substack.com and typefully.com; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Release is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 6.5k tokens (SKILL.md is roughly 26k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Release: Mole Release Notes Publisher (tw93/Mole, 70k stars), Draft Release Notes (jamiepine/voicebox, 57k stars), Release Bump (jamiepine/voicebox, 57k stars) and Verdaccio Pull Request Workflow (verdaccio/verdaccio, 18k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
joenandez (a GitHub user) maintains it in joenandez/spectre, which has 164 GitHub stars. The repository holds 26 skills in this directory. The repository was last updated on October 2, 2026.
Source: joenandez/spectre on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.