From rawgentic
Open and file a NEW GitHub issue — a feature request or bug report — for the active rawgentic project. Use whenever the user wants to capture a desired feature/enhancement or an observed/reproducible bug as a tracked issue, however phrased ("open/log/raise/file an issue", "write up a bug report", "file a feature request", "put it on github", "track this", "users keep asking for X"), even when no repo is named. It targets the repo from the project config, checks for duplicates, conforms to the issue template, and verifies referenced code exists. Do NOT use to implement/fix/code the change itself, to list/search/read existing issues, to comment on or review a PR against an issue, or to edit issue-template files. Invoke with /create-issue followed by a description of the desired feature or observed bug.
How this skill is triggered — by the user, by Claude, or both
Slash command
/rawgentic:create-issue Description of the feature to request or bug to reportDescription of the feature to request or bug to reportThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
<role>
Determine the active project:
/rawgentic:switch bound this session, use that project.claude_docs/session_registry.jsonl, grep your session_id, use the
most recent matching line..rawgentic_workspace.json from the Claude root. Exactly one project
active == true → use it. Multiple active → STOP: "Multiple active projects.
Run /rawgentic:switch <name> to bind this session." Missing/malformed/none
active → STOP and tell the user to run /rawgentic:new-project (or switch).activeProject.path may be relative (e.g. ./projects/app); resolve it against
the directory containing .rawgentic_workspace.json.Disabled-skill check: find the active project's entry in .rawgentic_workspace.json.
If its disabledSkills array contains create-issue, STOP and tell the user it's
disabled (and, if a BMAD alternative was chosen, name it). If workspace
bmadDetected is true but the entry has no disabledSkills field at all, STOP:
"BMAD detected but no skill preferences configured — run /rawgentic:setup."
Derive capabilities from one tested source of truth (never hand-derive):
python3 hooks/capabilities_lib.py derive --config <activeProject.path>/.rawgentic.json
Non-zero exit → config missing/corrupt/invalid; STOP and relay the printed message
(a version mismatch is only a stderr warning, not fatal). Exit 0 → stdout is
{"config": {...}, "capabilities": {...}}. Carry capabilities.repo and
capabilities.default_branch as literals into later commands (each Bash call is a
fresh shell — shell variables do not persist across calls).
Use config/capabilities for repo, branch, architecture, and standards. Trust the
config over any other file (e.g. a root CLAUDE.md); it is the project's contract.
gh issue list --repo <capabilities.repo> --search "<keywords>" --limit 10
If a listed issue plausibly covers the request, show it to the user and ask whether
it already covers their need before proceeding.<activeProject.path>/.github/ISSUE_TEMPLATE/feature_request.md<activeProject.path>/.github/ISSUE_TEMPLATE/bug_report.md
If no template exists, use a sensible default structure (Description, Acceptance
Criteria, Scope, Affected Components, Risk; for bugs: Steps to Reproduce, Expected,
Actual, Environment).find_symbol) if installed,
otherwise Grep/Glob/Read, to confirm every file/symbol you reference is real.
This is what keeps a hallucinated component out of the issue — don't skip it just
because Serena is absent.feat(scope): … (feature) or fix(scope): …
(bug). This keeps issue titles scannable and parseable by downstream tooling.Present the draft in a readable form (title, type, labels, complexity, description, acceptance criteria, scope, affected components, risk, related issues). Then:
Optional cross-model review (DEFAULT-OFF). Before creating, check whether the project opted into an adversarial pass for this skill:
python3 hooks/adversarial_review_lib.py is-enabled \
--workspace .rawgentic_workspace.json --project <name> --skill create-issue
Exit 0 → enabled; non-zero → skip silently (this is the default — behavior is
byte-for-byte unchanged, no temp file, no subprocess). When enabled, write the draft
to a temp file and run /rawgentic:adversarial-review <spec-path> spec; it is
report-only — surface any findings to the user before filing. Codex failure is
non-blocking: on any non-success, log it and proceed (do NOT block creation). WF1 has
no plan_lib loop-back, so this does NOT call consume_loopback and does not re-trigger
any earlier step.
Write the body to a temp file (handles multi-line content safely):
cat << 'ISSUE_BODY_EOF' > /tmp/wf1-issue-body.md
[full markdown body]
ISSUE_BODY_EOF
Labels: enhancement for features, bug for bugs, plus any component/scope labels.
Only use labels that already exist — check gh label list --repo <capabilities.repo>
and create one with gh label create only if needed.
Create it:
gh issue create --repo <capabilities.repo> \
--title "<conventional title>" --body-file /tmp/wf1-issue-body.md \
--label "<base label>" [--label "<scope label>"]
Capture the URL from stdout.
Failure handling: auth → gh auth status; transient/network → retry once after a
few seconds, and if it still fails save the body to
<activeProject.path>/docs/plans/draft-issue-YYYY-MM-DD.md and tell the user to
file manually; rate limit → wait and retry.
Clean up: rm -f /tmp/wf1-issue-body.md.
Append one line to claude_docs/session_notes.md:
### WF1 create-issue — DONE (<issue URL>, type, title)
Then report:
Issue created: <URL>
Type: <feature/bug> · Title: <title> · Labels: <labels>
Do NOT offer to start implementation. To implement, the user invokes WF2
(/rawgentic:implement-feature) separately, referencing the issue number.
npx claudepluginhub 3d-stories/rawgentic --plugin rawgenticCreates bite-sized, testable implementation plans from specs or requirements, with file structure and task decomposition. Activates before coding multi-step tasks.