WCAG 2.1 AA audit — perceivable, operable, understandable, robust criteria. Deep-dive for /launch-check accessibility.
中文简介正在准备中。当前显示原文说明。
Capture a new product idea / feature concept / internal tool proposal to the ideas backlog (pre-triage).
中文简介正在准备中。当前显示原文说明。
实测评分 未实测
查看安装方法安装前可以查看交给 AI 代理的指令内容。
Read .claude/rules/writing-standard.md. Use the controlled technical writing profile for the idea
record: state the opportunity plainly and preserve uncertainty.
Capture a new product, feature, or internal-tool idea so it lands somewhere durable instead of evaporating in chat. This skill is intentionally lightweight: it adds an entry to the ideas backlog and (optionally) creates a tracking GitHub Issue. It does not replace /write-spec — that comes later, after the idea has been triaged.
Read the registry path via portfolio_registry, the per-project docs dir via portfolio_projects_dir, and the ideas backlog via portfolio_ideas_backlog — all from .claude/hooks/_lib-portfolio-paths.sh. Source the helper at the top of any bash block that touches those paths:
source "$(git rev-parse --show-toplevel)/.claude/hooks/_lib-read-config.sh"
source "$(git rev-parse --show-toplevel)/.claude/hooks/_lib-portfolio-paths.sh"
registry=$(portfolio_registry)
Defaults match today's single-fork layout (./apexyard.projects.yaml, ./projects, ./projects/ideas-backlog.md). Adopters in split-portfolio mode override the portfolio.{registry, projects_dir, ideas_backlog} keys in .claude/project-config.json. Don't hardcode literal apexyard.projects.yaml or projects/ paths in bash blocks — the helper resolves whichever mode the adopter is in. See docs/multi-project.md.
/idea Auto-tag inbound emails by intent
/idea Internal CLI for resetting staging data
/idea New product: AI design system linter
Every idea lands in projects/ideas-backlog.md at the root of your ops repo (your fork of apexyard). One shared backlog for every project — triage decides which project ends up owning a given idea.
If the file doesn't exist yet, create it with a header and a table.
Use AskUserQuestion for every operator option menu in this skill. Follow .claude/rules/reporting-style.md § Operator choices.
Preserve multiple selections where the menu permits them. Split menus with more than four options into sequential wizard questions.
Keep single yes/no and ticket confirmation prompts as written.
The prose menus below are fallbacks only when the harness lacks AskUserQuestion.
Before any gh issue create (or other tracker CLI), write this skill's name to the active-issue-skill marker so require-skill-for-issue-create.sh lets the command through. At skill entry:
# Ops root through the session pin (docs/skills/shared/ops-root.md).
ops_root=$(p="${APEXYARD_OPS_PIN_DIR:-$HOME/.claude/apexyard}/ops-root-${CLAUDE_CODE_SESSION_ID:-}"; r=""; [ -z "${APEXYARD_OPS_DISABLE_PIN:-}" ] && [ -f "$p" ] && IFS= read -r r < "$p"; [ -f "$r/.claude/hooks/_lib-ops-root.sh" ] || { r="$PWD"; while [ -n "$r" ] && [ ! -f "$r/.claude/hooks/_lib-ops-root.sh" ]; do r=${r%/*}; done; }; [ -f "$r/.claude/hooks/_lib-ops-root.sh" ] && . "$r/.claude/hooks/_lib-ops-root.sh" && resolve_ops_root) && [ -n "$ops_root" ] || { echo "No ops root. See docs/skills/shared/ops-root.md." >&2; exit 1; }
mkdir -p "$ops_root/.claude/session"
marker_home="$ops_root"
. "$marker_home/.claude/hooks/_lib-session-markers.sh"
skill_marker=$(active_issue_skill_marker_path "$marker_home") || { echo "A session id is required. Restart through the harness adapter." >&2; exit 2; }
echo "idea" > "$skill_marker"
Remove the marker on every exit path (success, early-exit, user cancel, error):
marker_home="$ops_root"
. "$marker_home/.claude/hooks/_lib-session-markers.sh"
skill_marker=$(active_issue_skill_marker_path "$marker_home") || { echo "A session id is required. Restart through the harness adapter." >&2; exit 2; }
rm -f "$skill_marker"
The clear-issue-skill-marker.sh SessionStart hook clears only the current session's marker, but a clean exit should never leave one behind. See AgDR-0030.
Take the title from $ARGUMENTS. If empty, ask:
What's the idea? Give me a short title (1 line).
Ask conversationally (one question at a time, don't batch):
Category — must be one of four values. Use AskUserQuestion and recommend the best fit first.
Give each category a one-line effect. Present the numbered menu below only when the harness lacks the tool. Re-prompt on invalid input:
Category?
1. New Product
2. Feature
3. Internal Tool
4. Process
>
Accept 1, 2, 3, 4 or the corresponding word (case-insensitive). On anything else, say Please pick 1-4 or type the category name. and re-ask. Loop until valid — do not silently accept garbage.
Submitter — who's proposing it. Default to the current git user (git config user.name). If the user wants to override, accept their input as-is.
One-line description — what would it do? Who's it for? If empty, re-prompt: Give me one sentence about what this idea does. Loop until non-empty.
Don't go deeper than that — this is a lightweight capture, not a spec.
Before computing an ID or appending anything, fuzzy-match the title against existing backlog entries:
# Normalise a title: lowercase, strip punctuation, collapse whitespace
normalise() { echo "$1" | tr '[:upper:]' '[:lower:]' | tr -d '[:punct:]' | tr -s ' '; }
# Extract existing titles from the backlog table
grep -E '^\| IDEA-[0-9]+ \|' projects/ideas-backlog.md 2>/dev/null \
| awk -F'|' '{print $3}' \
| sed 's/^ *//;s/ *$//'
Compare the normalised new title against every normalised existing title using a simple token-overlap heuristic: if ≥ 80% of the words in the shorter title appear in the longer one, flag as a potential duplicate.
If a potential match is found:
⚠ Similar idea already in the backlog:
IDEA-025 — {existing title} (status: {status})
Is this a duplicate? (y = skip, n = add anyway)
>
y → skip the append, return without logging anything new, suggest /write-spec IDEA-025 if the user wants to work on the existing idean → continue to step 4If no match is found, continue silently to step 4.
# Find the highest existing IDEA-NNN in the backlog file
grep -oE 'IDEA-[0-9]+' <backlog-file> 2>/dev/null | sort -V | tail -1
# Increment by 1, or start at IDEA-001 if none exist
If the backlog file doesn't exist, create it with this header:
# Ideas Backlog
Lightweight capture of product ideas, feature concepts, and internal tool proposals.
Use `/idea` to add a new entry. Triage moves entries into `/write-spec`, then into a GitHub Issue.
| ID | Title | Category | Submitter | Date | Status | Description |
|----|-------|----------|-----------|------|--------|-------------|
Append a new row:
| IDEA-NNN | {title} | {category} | {submitter} | YYYY-MM-DD | NEW | {one-line description} |
After the entry is appended, ask:
Would you like me to create a tracking GitHub Issue for IDEA-NNN? (y/n)
If the user says no, skip this step entirely — the backlog entry is already saved, and that's enough.
If yes, resolve the idea body template via the portfolio helper so adopter overrides win when present:
source "$(git rev-parse --show-toplevel)/.claude/hooks/_lib-read-config.sh"
source "$(git rev-parse --show-toplevel)/.claude/hooks/_lib-portfolio-paths.sh"
template=$(portfolio_resolve_template tickets/idea.md) # → custom-templates/tickets/idea.md if present, else templates/tickets/idea.md
Single-fork adopters (no portfolio block) and adopters with no override fall straight through to templates/tickets/idea.md. Adopters who want a customised idea-tracking-issue shape drop their version at <private_repo>/custom-templates/tickets/idea.md. See templates/README.md for the path-mirroring convention.
Backward-compat fallback: if portfolio_resolve_template returns empty (template file missing — partial adopter setup), fall back to the inline heredoc body below and print a one-line WARN on stderr (WARN: tickets/idea.md template missing — using inline fallback).
Substitute the gathered values into the resolved template (or the fallback heredoc below), then create with the enhancement and idea labels (creating the labels if needed):
gh issue create \
--title "[Idea] {title}" \
--body "$(cat <<'EOF'
## Idea
{one-line description}
## Category
{category}
## Submitter
{submitter}
## Backlog Entry
IDEA-NNN — see backlog file.
## Next Step
Triage. Decide whether to spec, schedule, or close.
## Glossary
| Term | Definition |
|------|------------|
| {term} | {definition} |
EOF
)" \
--label "idea,needs-triage"
Error handling — if gh issue create fails for any reason (missing auth, labels don't exist, network error, rate limit), catch the error and fall back gracefully:
⚠ Couldn't create the tracking issue: {reason}
The idea is still saved in projects/ideas-backlog.md as IDEA-NNN.
Try again? (y = retry, n = skip, gh = show the gh error for debugging)
>
Common failure modes and what to do:
| Failure | Action |
|---|---|
could not resolve repository | Ask the user which repo to file the issue in; the backlog entry was already saved |
missing scope: issues:write | Tell the user to run gh auth refresh -s issues and offer to retry |
label "idea" not found | Create the label first (gh label create idea) then retry |
repository has disabled issues (#653) | GitHub Issues is off on the repo. Surface the fix: gh repo edit <owner/repo> --enable-issues (needs admin), or set tracker.kind to your real tracker. Reuse tracker_check_issues from _lib-tracker.sh to print the hint. The backlog entry is already saved. |
HTTP 403 rate-limited | Offer to retry after a short wait |
| Any other error | Show the raw gh output, skip the tracking issue, keep the backlog entry |
The guiding principle: the backlog entry is the primary artefact; the tracking issue is a bonus. Never lose the backlog entry because the GitHub Issue creation failed.
If the issue is created successfully, append the issue URL to the backlog row's Description column as (GH#NN).
After the GitHub Issue step (whether the user accepted or skipped it), ask:
Validate now? Run /validate-idea IDEA-NNN — y/n (default n)
Default-no respects the lightweight-capture intent of /idea. Most users batch-validate later. If the user accepts, hand off to /validate-idea IDEA-NNN; if they skip, proceed to step 8.
Captured: IDEA-NNN — {title}
Backlog: {file path}
Status: NEW
Tracking issue: {url or "skipped"}
Validation: {"completed — verdict <GREEN|YELLOW|RED>" | "skipped (run /validate-idea IDEA-NNN later)"}
Next: triage with the team, then `/write-spec` if it survives.
/idea captures, it does not spec. Don't ask for goals, metrics, or requirements here.IDEA-NNN, zero-padded to 3 digits.projects/ideas-backlog.md at the root of the ops repo; triage assigns it to a project later.SUPERSEDED, not removal.| Status | Meaning |
|---|---|
| NEW | Just captured, not triaged |
| TRIAGED | Reviewed, awaiting decision |
| SPECCED | /write-spec produced a PRD |
| SHIPPED | Built and released |
| WONTDO | Triaged out — not pursuing |
| SUPERSEDED | Replaced by a different idea |
Part of ApexYard — multi-project SDLC framework for Claude Code · MIT.
还没有评价。欢迎分享你的使用感受。
无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。
还没有评论。来写第一条吧。
WCAG 2.1 AA audit — perceivable, operable, understandable, robust criteria. Deep-dive for /launch-check accessibility.
中文简介正在准备中。当前显示原文说明。
WCAG 2.2 AA audit — perceivable, operable, understandable, robust criteria. Deep-dive for /launch-check accessibility.
中文简介正在准备中。当前显示原文说明。
Browse / search / show / stats AgDRs across the portfolio — recalls "have we decided this before?".
中文简介正在准备中。当前显示原文说明。
Analytics audit — SDK config, event naming, funnel completeness, dashboards. Deep-dive for /launch-check analytics.
中文简介正在准备中。当前显示原文说明。
Record per-PR architecture-review approval for design-artifact PRs (required by the architecture gate). ONLY on an explicit per-PR architect "approved".
中文简介正在准备中。当前显示原文说明。
Record per-PR design-review approval (UI merge gate). ONLY on an explicit per-PR designer "approved".
中文简介正在准备中。当前显示原文说明。