plan-to-issues-00f9d6 — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited plan-to-issues-00f9d6 (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Convert a completed PLAN into GitHub parent + sub-issues using native sub-issue API.
Follow every step in order. Stop and report if any step fails.
Check if $ARGUMENTS is provided:
/plan-to-issues docs/plans/my-plan.md):Verify the file exists (test -f "$ARGUMENTS"), then read it. Save the path: PLAN_FILE="$ARGUMENTS" (used later for bidirectional linking).
/plan-to-issues "Add caching layer"):If $ARGUMENTS is not a valid file path, use it as plan description. Set PLAN_FILE="" (no file to link back to).
/plan-to-issues):Read docs/codingbuddy/context.md and extract the most recent PLAN section's decisions and notes. Set PLAN_FILE="" (no file to link back to).
If no plan source is found, stop and ask the user to run PLAN first.
REPO=$(gh repo view --json nameWithOwner --jq .nameWithOwner)
gh label list --json name --jq '.[].name'Search for existing issues with similar titles to prevent duplicates:
gh issue list --state open --search "<plan-title-keywords>" --json number,title --jq '.[] | "#\(.number) \(.title)"'If duplicates found, inform the user and ask whether to continue or update existing issues.
Extract work units from the plan. For each candidate unit, verify:
For each unit:
Can this be merged independently without breaking existing features?
├── YES → Keep as separate sub-issue
└── NO → Merge with related unit(s) into one sub-issue
Does this modify the same files as another unit?
├── YES → Consider merging or enforce ordering
└── NO → Safe for parallel workClassify dependencies:
Infer type from plan content:
featrefactor or chorefixdocumentationpriority:mustpriority:shouldpriority:could## Overview
[1-2 sentences: what and why]
## Background
[2-3 sentences: context and motivation]
## Plan Document
<!-- Include ONLY when PLAN_FILE is non-empty -->
Source plan: [`<PLAN_FILE>`](<permalink>) <!-- permalink = GitHub blob URL for the file -->
## Sub-issues
Linked via GitHub native sub-issues (see Sub-issues section below).
| # | Title | Deployable | Depends on |
|---|-------|-----------|------------|
| 1 | ... | Yes | — |
| 2 | ... | Yes | — |
| 3 | ... | Yes | #1 recommended |Conditional: Omit the## Plan Documentsection entirely whenPLAN_FILEis empty (text or context-based plans).
## Purpose
[1-2 sentences: why this work item exists]
## Changes
- `path/to/file.ts` — what changes
- `path/to/other.ts` — what changes
## Acceptance Criteria
- [ ] Specific, verifiable criterion 1
- [ ] Specific, verifiable criterion 2
- [ ] Existing tests pass
- [ ] Can be merged independentlyComment 1 — Technical Details:
## Technical Details
### Exact Changes
[Precise code/config/YAML changes to make]
### Steps
1. [Concrete step]
2. [Concrete step]Comment 2 — Background & References (if needed):
## Background
[Why this approach was chosen]
## References
- [Link 1](url)
- [Link 2](url)
## Dependencies
- Precedes: #NNN depends on this
- Follows: Recommended after #NNN (but independently deployable)Present a summary before creating anything:
Plan: "<title>"
Parent: "<parent title>" (labels: <detected labels>)
Sub-1: "<title>" — <files> (deploy: independent)
Sub-2: "<title>" — <files> (deploy: independent)
Sub-3: "<title>" — <files> (deploy: independent, after Sub-1 recommended)
Total: <N> sub-issues, all independently deployable
Proceed?Wait for user approval. Apply any requested changes.
Build the parent body from Step 4. When PLAN_FILE is non-empty, include the ## Plan Document section with a permalink constructed as:
BRANCH=$(git rev-parse --abbrev-ref HEAD)
PLAN_LINK="https://github.com/$REPO/blob/$BRANCH/$PLAN_FILE"PARENT_URL=$(gh issue create \
--title "<title>" \
--label "<labels>" \
--body "$(cat <<'EOF'
<parent body from Step 4, with Plan Document section if PLAN_FILE is set>
EOF
)")
PARENT_NUM=$(echo "$PARENT_URL" | grep -o '[0-9]*$')For each sub-issue:
SUB_URL=$(gh issue create \
--title "<title>" \
--label "<labels>" \
--body "$(cat <<'EOF'
<sub-issue body from Step 4>
EOF
)")
SUB_NUM=$(echo "$SUB_URL" | grep -o '[0-9]*$')gh issue comment $SUB_NUM --body "$(cat <<'EOF'
<Comment 1: Technical Details>
EOF
)"
# Only if background/references exist:
gh issue comment $SUB_NUM --body "$(cat <<'EOF'
<Comment 2: Background & References>
EOF
)"# Get the internal ID (not node_id) for the sub-issue
SUB_ID=$(gh api /repos/$REPO/issues/$SUB_NUM --jq .id)
# Create native sub-issue relationship
gh api /repos/$REPO/issues/$PARENT_NUM/sub_issues \
-X POST -F sub_issue_id=$SUB_ID --jq '.id'Repeat for every sub-issue.
If the sub-issue API fails (HTTP 500, 422, or 404):
sub-issue label to the sub-issue (if the label exists)Sub-issue: #NNN — <title>Parent: #PARENT_NUMEdit the parent issue body to include actual sub-issue numbers in the table.
gh issue edit $PARENT_NUM --body "$(cat <<'EOF'
<updated body with #NNN references>
EOF
)"Skip this step if `PLAN_FILE` is empty.
Append a ## Created Issues section to the plan document so the plan links forward to its issues:
if [ -n "$PLAN_FILE" ]; then
cat >> "$PLAN_FILE" <<EOF
---
## Created Issues
> Auto-generated by \`/plan-to-issues\` — do not edit manually.
- **Parent**: #${PARENT_NUM} — <parent title>
$(for i in $(seq 1 ${#SUB_NUMS[@]}); do
echo "- **Sub-issue**: #${SUB_NUMS[$i]} — <sub-issue $i title>"
done)
**Created**: $(date -u +"%Y-%m-%dT%H:%M:%SZ")
EOF
fiThis creates a bidirectional link: the parent issue points to the plan (via ## Plan Document), and the plan points back to all created issues (via ## Created Issues).
Registered <N> issues:
Parent: #<num> — "<title>"
Sub: #<num> — "<title>" (deploy: independent)
Sub: #<num> — "<title>" (deploy: independent)
Sub: #<num> — "<title>" (deploy: independent, after #<num> recommended)
Comments: Technical details added to each sub-issue
Hierarchy: GitHub native sub-issues linked
Bidirectional links: <status>
- Parent issue → plan document: <YES if PLAN_FILE was set, otherwise SKIPPED>
- Plan document → issues: <YES if PLAN_FILE was set, otherwise SKIPPED>Print all issue URLs.
Record the created issues in docs/codingbuddy/context.md for cross-session continuity.
Collect all sub-issue numbers from Step 6 into a space-separated variable SUB_NUMS.
TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
mkdir -p docs/codingbuddy
cat >> docs/codingbuddy/context.md <<EOF
## Plan-to-Issues Result (${TIMESTAMP})
- **Parent Issue**: #${PARENT_NUM}
- **Sub-issues**: $(for n in $SUB_NUMS; do printf "#%s " "$n"; done)
- **Created At**: ${TIMESTAMP}
- **Total**: $(echo $SUB_NUMS | wc -w | tr -d ' ') sub-issues
EOFIf the codingbuddy MCP server is available, prefer calling update_context instead:
update_context({
mode: <current_mode>,
progress: ["Plan-to-Issues: parent #PARENT_NUM, sub-issues #N1 #N2 ..."],
notes: ["Issues created at TIMESTAMP via plan-to-issues skill"]
})~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.