Run WCAG 2.2 Level AA accessibility audits against generated UI. Use when a story has ui:true or when asked to audit accessibility.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Manage GitHub Projects v2 board: add issues, update field values, and query board state. Use when managing project boards.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.
Manage GitHub Projects v2 board operations: add issues as cards, update field values (status, type, ADR required), and query board state. Uses gh project CLI where available; falls back to gh api graphql for operations the CLI does not expose.
| Field | Source | Example |
|---|---|---|
project_number | project.config.yaml | 3 |
project_node_id | project.config.yaml | "PVT_kwDO..." |
issue_node_id | gh-issues skill output | "I_kwDO..." |
issue_number | gh-issues skill output | 42 |
field_name | project field name | "Status" |
field_value | target option name | "In progress" |
PROJECT_NUMBER=$(python3 -c "
import sys
for line in open('project.config.yaml'):
if 'project_number:' in line:
print(line.split(':')[1].strip())
break
")
PROJECT_NODE=$(python3 -c "
import sys
for line in open('project.config.yaml'):
if 'project_node_id:' in line:
print(line.split(':', 1)[1].strip())
break
")
# CLI (preferred)
gh project item-add "$PROJECT_NUMBER" \
--owner "{owner}" \
--url "https://github.com/{owner}/{repo}/issues/{issue_number}"
# GraphQL fallback (when CLI unavailable or for automation)
gh api graphql -f query='
mutation($project: ID!, $content: ID!) {
addProjectV2ItemById(input: {projectId: $project, contentId: $content}) {
item { id }
}
}' \
-f project="$PROJECT_NODE" \
-f content="{issue_node_id}" \
--jq '.data.addProjectV2ItemById.item.id'
Save the returned item_id — required for field updates.
Field updates require the field's node ID and the option's node ID (for single-select fields).
FIELDS=$(gh api graphql -f query='
query($project: ID!) {
node(id: $project) {
... on ProjectV2 {
fields(first: 20) {
nodes {
... on ProjectV2Field { id name }
... on ProjectV2SingleSelectField {
id name
options { id name }
}
}
}
}
}
}' \
-f project="$PROJECT_NODE")
# Extract field ID by name
FIELD_ID=$(echo "$FIELDS" | python3 -c "
import sys, json
d = json.load(sys.stdin)
for f in d['data']['node']['fields']['nodes']:
if f.get('name') == '{field_name}':
print(f['id'])
break
")
# Extract option ID by value (single-select fields)
OPTION_ID=$(echo "$FIELDS" | python3 -c "
import sys, json
d = json.load(sys.stdin)
for f in d['data']['node']['fields']['nodes']:
if f.get('name') == '{field_name}':
for opt in f.get('options', []):
if opt['name'] == '{field_value}':
print(opt['id'])
break
")
gh api graphql -f query='
mutation($project: ID!, $item: ID!, $field: ID!, $option: String!) {
updateProjectV2ItemFieldValue(input: {
projectId: $project
itemId: $item
fieldId: $field
value: { singleSelectOptionId: $option }
}) {
projectV2Item { id }
}
}' \
-f project="$PROJECT_NODE" \
-f item="{item_id}" \
-f field="$FIELD_ID" \
-f option="$OPTION_ID"
gh api graphql -f query='
mutation($project: ID!, $item: ID!, $field: ID!, $value: String!) {
updateProjectV2ItemFieldValue(input: {
projectId: $project
itemId: $item
fieldId: $field
value: { text: $value }
}) {
projectV2Item { id }
}
}' \
-f project="$PROJECT_NODE" \
-f item="{item_id}" \
-f field="$FIELD_ID" \
-f value="{text_value}"
| Phase | Field | Value |
|---|---|---|
| Discover | Status | Todo |
| Architect | Status | In progress |
| Implement | Status | In progress |
| Validate | Status | In Review |
| Done | Status | Done |
# List all items with status
gh project item-list "$PROJECT_NUMBER" \
--owner "{owner}" \
--format json \
--jq '.items[] | {id, title: .content.title, status: .fieldValues[] | select(.field.name=="Status") | .name}'
| Condition | Action |
|---|---|
project_node_id missing from config | Run maple project to bootstrap. Stop until resolved. |
| Item already on board | Query before adding. gh project item-list and check content URL. Skip if present. |
| Field ID not found | Re-fetch fields. Field names are case-sensitive. |
| Option ID not found | List available options from field metadata. Do not guess. |
| GraphQL rate limit | Wait 60 seconds. Retry once. Log and stop on second failure. |
[gh-projects] ADD #42 → project #{project_number} item_id={id}
[gh-projects] UPDATE #42 field=Status value="In progress"
[gh-projects] SKIP #42 already on board
아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.
로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.
아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.
Run WCAG 2.2 Level AA accessibility audits against generated UI. Use when a story has ui:true or when asked to audit accessibility.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Generate a complete component file tree wired to design tokens with tests and Gherkin spec. Use when scaffolding a new UI component.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Extract Gherkin scenarios from story markdown files into runnable .feature files and generate step definition stubs. Use when syncing stories to test suites.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Read and write design tokens in W3C DTCG format (tokens.json) and emit CSS, Tailwind, and Mantine outputs. Use when modifying or generating design tokens.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Apply Docker and Docker Compose best practices for containerising services. Use when writing or reviewing Dockerfiles and compose configs.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Identify and annotate cloud cost implications of architectural decisions. Use when reviewing infrastructure changes or designing new services.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.