publish-plan
SkillDev toolspublish-plan
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the publish-plan skill
What this skill tells your AI
The instructions your AI receives, as published by markmhendrickson/neotoma in .claude/skills/publish-plan/SKILL.md and read by ahel’s review.
name: publish-plan description: Convert a plan file into a GitHub Discussion post for public input. triggers:
- publish plan
- share plan
- publish-plan
- /publish-plan
publish-plan
Convert a plan file (release plan, feature spec, or .cursor/plans/ file) into a
GitHub Discussion post written for external readers. Strips internal references and
PII, rewrites for a public audience, and optionally posts via the GitHub CLI.
When to Use
Use when you have a plan in progress and want external input before execution. Pass the path to any plan document as the argument:
/publish-plan docs/releases/in_progress/v0.12.0/release_plan.md
/publish-plan .cursor/plans/some_plan.md
/publish-plan docs/feature_units/in_progress/FU-2026-01-001/FU-2026-01-001_spec.md
Optionally pass a specific question to ask readers as a second argument:
/publish-plan docs/releases/in_progress/v0.12.0/release_plan.md "Does this sync model work for your use case?"
Step 1: Read and Parse the Plan
- Read the plan file at the provided path.
- Extract the following from the document:
- Goal / motivation: Why does this exist? What problem does it solve?
- Approach / key decisions: What choices were made or are still open?
- Scope boundaries: What is explicitly excluded or deferred?
- Open questions: What is uncertain or unresolved?
Step 2: Strip Internal References
Remove or redact anything that should not be public:
- Full names and email addresses of individuals
- Internal Slack channels, ticket numbers, or system identifiers that leak org structure
- Pricing, cost, or revenue figures
- Internal hostnames, credentials, or environment-specific configuration values
- Agent execution notes (batch status, orchestrator output, FU dependency trees)
- Anything marked
<!-- internal -->or[INTERNAL]
Do not strip:
- Feature IDs (FU-YYYY-MM-NNN) — these are useful public references
- Architecture decisions and technical rationale
- Version numbers and release IDs
- Links to public repo files or issues
Step 3: Draft the Discussion Post
Rewrite the extracted content into the following structure. Write in plain prose for an external developer audience. No jargon specific to the foundation framework.
## What we're building
[2-3 sentences: the problem being solved and the general approach. No implementation detail.]
## Key decisions
[3-5 bullet points: choices made or still open. Frame as "We chose X because Y" or "We're deciding between X and Y".]
## What's out of scope (for now)
[2-4 bullet points: explicit exclusions that might surprise readers or that they might assume are included.]
## Where we want input
[The specific question. One sentence. Concrete. If the user provided a question, use it here. Otherwise, derive the most useful open question from the plan.]
---
*This is a pre-execution plan. We're sharing it before we build to get early input.
Comments and questions welcome.*
Apply the content style rules:
- Complete sentences throughout
- No em dashes, no "leverage", no "seamless", no marketing language
- Active voice
- 15-20 words per sentence maximum
- No filler transitions ("Furthermore", "Moreover", "In addition")
Step 4: Preview and Confirm
Show the drafted post to the user and ask:
Here is the Discussion post draft:
---
[post content]
---
Options:
1. Post to GitHub Discussions now (requires gh CLI and Discussions enabled)
2. Copy to clipboard / show as output only
3. Edit — describe what to change
Wait for the user's choice before proceeding.
Step 5: Post to GitHub Discussions (if requested)
If the user chooses to post, use the GitHub CLI GraphQL API:
# Get the repository ID and Discussions category ID
REPO_OWNER=$(gh repo view --json owner -q '.owner.login')
REPO_NAME=$(gh repo view --json name -q '.name')
# List available discussion categories
gh api graphql -f query='
query($owner: String!, $name: String!) {
repository(owner: $owner, name: $name) {
discussionCategories(first: 10) {
nodes { id name }
}
}
}
' -f owner="$REPO_OWNER" -f name="$REPO_NAME"
Use category "RFC / Plans" if it exists. If it does not exist, use the closest match ("Ideas", "General") and note to the user that a dedicated category would be better. Do not create the category automatically.
Post the discussion:
REPO_ID=$(gh api graphql -f query='
query($owner: String!, $name: String!) {
repository(owner: $owner, name: $name) { id }
}
' -f owner="$REPO_OWNER" -f name="$REPO_NAME" -q '.data.repository.id')
CATEGORY_ID="<selected category id>"
TITLE="<derived from plan title or release version>"
BODY="<the drafted post content>"
gh api graphql -f query='
mutation($repoId: ID!, $categoryId: ID!, $title: String!, $body: String!) {
createDiscussion(input: {
repositoryId: $repoId,
categoryId: $categoryId,
title: $title,
body: $body
}) {
discussion { url }
}
}
' -f repoId="$REPO_ID" -f categoryId="$CATEGORY_ID" \
-f title="$TITLE" -f body="$BODY"
Report the Discussion URL on success.
Step 6: Follow-up Reminder
After posting (or outputting the draft), remind the user:
Remember to reply in the thread once a decision is made. A single note —
"We went with X because Y" — closes the loop for anyone who finds the
thread later.
Error Handling
gh CLI not installed or not authenticated:
Output the draft post only. Include a note: "Install and authenticate the GitHub
CLI (gh auth login) to post directly from this skill."
Discussions not enabled on the repository: Output the draft post only. Include a note: "Enable Discussions in the repository Settings to use the post step."
Plan file not found: Exit with: "Plan file not found: {path}. Pass the path to an existing plan document."
Configuration
No configuration required. The skill reads foundation-config.yaml for the
repository name and remote when deriving post metadata, but falls back to gh repo view.
Signals
- GitHub stars
- 32
- Forks
- 3
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
publish-plan- Source
- github.com/markmhendrickson/neotoma