Loading...
Loading...
Compare original and translation side by side
~/.claude/skills/github-issue-from-templates/
SKILL.md # This file — generic workflow engine
references/
schema.json # JSON Schema for template config files
settings-schema.json # JSON Schema for settings.json
~/.claude/configs/github-issue-from-templates/
settings.json # Storage mode config — created on first run
*.json # Template configs (local mode only) — user-managed, survives skill updates
<owner>/<repo>/<path>/ # Template configs (GitHub mode) — stored in a GitHub repo
*.jsonWhy a separate directory? The skill installation directory () is replaced on~/.claude/skills/.... Storing template configs innpx skills update(local mode) or a GitHub repo (GitHub mode) keeps them safe across updates. The~/.claude/configs/github-issue-from-templates/file always lives locally since it tells the skill where to find configs.settings.json
~/.claude/skills/github-issue-from-templates/
SKILL.md # 本文件——通用工作流引擎
references/
schema.json # 模板配置文件的JSON Schema
settings-schema.json # settings.json的JSON Schema
~/.claude/configs/github-issue-from-templates/
settings.json # 存储模式配置——首次运行时创建
*.json # 模板配置文件(仅本地模式)——由用户管理,Skill更新时不会被覆盖
<owner>/<repo>/<path>/ # 模板配置文件(GitHub模式)——存储在GitHub仓库中
*.json为何使用独立目录? Skill安装目录()在执行~/.claude/skills/...时会被替换。将模板配置文件存储在npx skills update(本地模式)或GitHub仓库(GitHub模式)中,可确保它们在Skill更新后依然保留。~/.claude/configs/github-issue-from-templates/文件始终存储在本地,因为它用于告知Skill配置文件的位置。settings.json
get_file_contentscreate_issueghghgh auth statusghghmcpcliNote: When using GitHub repo storage, the same detected method is used for additional operations: listing directory contents, reading files, creating/updating files, and optionally creating repositories.
get_file_contentscreate_issueghghgh auth statusghghmcpcli注意:当使用GitHub仓库存储时,检测到的方法也会用于其他操作:列出目录内容、读取文件、创建/更新文件,以及可选的创建仓库。
~/.claude/configs/github-issue-from-templates/settings.jsonreferences/settings-schema.jsonconfigStorage.type === "local"~/.claude/configs/github-issue-from-templates/configStorage.type === "github"~/.claude/configs/github-issue-from-templates/settings.jsonreferences/settings-schema.jsonconfigStorage.type === "local"~/.claude/configs/github-issue-from-templates/configStorage.type === "github"~/.claude/configs/github-issue-from-templates/settings.json{
"configStorage": {
"type": "local"
}
}ownerrepopathconfigs/github-issue-from-templates/branchmainsettings.json{
"configStorage": {
"type": "github",
"owner": "<owner>",
"repo": "<repo>",
"path": "configs/github-issue-from-templates/",
"branch": "main"
}
}github-issue-from-templates-configscreate_repositorynameprivate: truedescriptiongh repo create <owner>/github-issue-from-templates-configs --private --description "Template configs for github-issue-from-templates skill"README.mdsettings.json~/.claude/configs/github-issue-from-templates/settings.json{
"configStorage": {
"type": "local"
}
}ownerrepopathconfigs/github-issue-from-templates/branchmainsettings.json{
"configStorage": {
"type": "github",
"owner": "<owner>",
"repo": "<repo>",
"path": "configs/github-issue-from-templates/",
"branch": "main"
}
}github-issue-from-templates-configscreate_repositorynameprivate: truedescriptiongh repo create <owner>/github-issue-from-templates-configs --private --description "Template configs for github-issue-from-templates skill"README.mdsettings.jsonsettings.json.jsonsettings.json.json~/.claude/configs/github-issue-from-templates/settings.jsonsettings.json.jsonsettings.json.json~/.claude/configs/github-issue-from-templates/settings.json.json~/.claude/configs/github-issue-from-templates/settings.json.jsonsettings.jsonREADME.mdtriggers.keywordstriggers.descriptionnamedescriptionnamedescription~/.claude/configs/github-issue-from-templates/.jsonsettings.json.jsonsettings.jsonREADME.mdtriggers.keywordstriggers.descriptionnamedescriptionnamedescriptionconfigStorage.type === "github"configStorage.type === "github"get_file_contentsowner: <configStorage.owner>
repo: <configStorage.repo>
path: <configStorage.path>
ref: <configStorage.branch>.jsonsettings.jsongh api repos/<owner>/<repo>/contents/<path>?ref=<branch> --jq '.[] | select(.name | endswith(".json")) | select(.name != "settings.json") | .name'get_file_contentsowner: <configStorage.owner>
repo: <configStorage.repo>
path: <configStorage.path>
ref: <configStorage.branch>.jsonsettings.jsongh api repos/<owner>/<repo>/contents/<path>?ref=<branch> --jq '.[] | select(.name | endswith(".json")) | select(.name != "settings.json") | .name'get_file_contentsowner: <configStorage.owner>
repo: <configStorage.repo>
path: <configStorage.path>/<filename>
ref: <configStorage.branch>gh api repos/<owner>/<repo>/contents/<path>/<filename>?ref=<branch> --jq '.content' | base64 -dget_file_contentsowner: <configStorage.owner>
repo: <configStorage.repo>
path: <configStorage.path>/<filename>
ref: <configStorage.branch>gh api repos/<owner>/<repo>/contents/<path>/<filename>?ref=<branch> --jq '.content' | base64 -dget_file_contentsowner: <config.repository.owner>
repo: <config.repository.repo>
path: <config.templateSource.path>ghgh api repos/<config.repository.owner>/<config.repository.repo>/contents/<config.templateSource.path> --jq '.content' | base64 -dconfig.templateSource.formatget_file_contentsowner: <config.repository.owner>
repo: <config.repository.repo>
path: <config.templateSource.path>ghgh api repos/<config.repository.owner>/<config.repository.repo>/contents/<config.templateSource.path> --jq '.content' | base64 -dconfig.templateSource.formatymlymltitle:"[Issue Type] [Short descriptive title]"labels:assignees:body:type: markdownidtypedropdowninputtextareaattributes.labelattributes.descriptionattributes.optionsattributes.placeholdervalidations.requiredtitle:"[Issue Type] [Short descriptive title]"labels:assignees:body:type: markdownidtypedropdowninputtextareaattributes.labelattributes.descriptionattributes.optionsattributes.placeholdervalidations.requiredmdmd---title:'[A11y]: Product - Feature - Request'labels:assignees:##- [ ] Item text- **Team name:**---title:'[A11y]: Product - Feature - Request'labels:assignees:##- [ ] Item text- **Team name:**config.fieldDefaults[fieldId].valueconfig.defaultsconfig.fieldSkipConditions[fieldId]onlyWhenvalidations.required: truelabeldescriptionplaceholderconfig.fieldDefaults[fieldId].gatheringNotesconfig.fieldDefaults[fieldId].valueconfig.defaultsconfig.fieldSkipConditions[fieldId]onlyWhenvalidations.required: truelabeldescriptionplaceholderconfig.fieldDefaults[fieldId].gatheringNotesconfig.title.override[Issue Type]issue-type[Short descriptive title]summaryconfig.title.override[Issue Type]issue-type[Short descriptive title]summary### Field Labelno response### 字段标签no responseconfig.labels.defaultlabels:config.labels.conditionalkeywordfieldValuefieldTransformlowercase-hyphenatenotesconfig.labels.defaultlabels:config.labels.conditionalkeywordfieldValuefieldTransformlowercase-hyphenatenotesconfig.assignees.defaultconfig.assignees.promptUserconfig.assignees.defaultconfig.assignees.promptUser**Title**: [composed title]
**Labels**: label1, label2, label3
**Assignees**: @user1, @user2
**Project**: [project board name] → [status]
**Body**:
[rendered body preview]**标题**:[组装好的标题]
**标签**:label1, label2, label3
**经办人**:@user1, @user2
**项目**:[项目看板名称] → [状态]
**正文**:
[渲染后的正文预览]issue_writemethod: create
owner: <config.repository.owner>
repo: <config.repository.repo>
title: <composed title>
body: <composed body>
labels: <label array>
assignees: <assignee array>gh issue creategh issue create \
--repo <config.repository.owner>/<config.repository.repo> \
--title "<composed title>" \
--body "<composed body>" \
--label "<label1>" --label "<label2>" \
--assignee "<assignee1>" --assignee "<assignee2>"--label--assigneegh issue create \
--repo owner/repo \
--title "Title" \
--body "$(cat <<'EOF'
<composed body>
EOF
)" \
--label "label1" --label "label2"issue_writemethod: create
owner: <config.repository.owner>
repo: <config.repository.repo>
title: <组装好的标题>
body: <组装好的正文>
labels: <标签数组>
assignees: <经办人数组>gh issue creategh issue create \
--repo <config.repository.owner>/<config.repository.repo> \
--title "<组装好的标题>" \
--body "<组装好的正文>" \
--label "<label1>" --label "<label2>" \
--assignee "<assignee1>" --assignee "<assignee2>"--label--assigneegh issue create \
--repo owner/repo \
--title "Title" \
--body "$(cat <<'EOF'
<组装好的正文>
EOF
)" \
--label "label1" --label "label2"html_urlgh issue createconfig.postCreationconfig.postCreation.displayFormat{issueNumber}{issueUrl}config.postCreation.additionalNoteshtml_urlgh issue createconfig.postCreationconfig.postCreation.displayFormat{issueNumber}{issueUrl}config.postCreation.additionalNotesconfig.linkFormatting.rulesmatchformatcustomText(see design)[descriptive text](url)config.linkFormatting.rulesmatchformatcustomText(see design)[描述文本](url)config.acceptanceCriteriaconfig.acceptanceCriteria.defaultItemsconfig.acceptanceCriteria.formatting.stylechecklist- [ ] itembullets- itemconfig.acceptanceCriteria.formatting.avoidPrefixesconfig.acceptanceCriteriaconfig.acceptanceCriteria.defaultItemsconfig.acceptanceCriteria.formatting.stylechecklist- [ ] 条目bullets- 条目config.acceptanceCriteria.formatting.avoidPrefixessettings.jsonreferences/settings-schema.jsonsettings.jsonsettings.jsonreferences/settings-schema.jsonsettings.jsonconfigStorage.type === "github"gh auth statusconfigStorage.type === "github"gh auth status.json.jsonget_file_contentsgh apigh auth statusget_file_contentsgh apigh auth statusissue_writegh issue createghissue_writegh issue creategh.jsonreferences/schema.jsonsettings.jsonreferences/schema.json.jsonsettings.jsonconfigStorage.type === "local"configStorage.type === "local".json~/.claude/configs/github-issue-from-templates/references/schema.jsonrepository.ownerrepository.repotemplateSource.pathtemplateSource.formatymlmdtriggers.keywordsfieldDefaultsfieldSkipConditions~/.claude/configs/github-issue-from-templates/.jsonreferences/schema.jsonrepository.ownerrepository.repotemplateSource.pathtemplateSource.formatymlmdtriggers.keywordsfieldDefaultsfieldSkipConditionsconfigStorage.type === "github"configStorage.type === "github"references/schema.jsoncreate_or_update_fileowner: <configStorage.owner>
repo: <configStorage.repo>
path: <configStorage.path>/<filename>.json
content: <base64-encoded JSON>
message: "Add <template-name> template config"
branch: <configStorage.branch>gh api repos/<owner>/<repo>/contents/<path>/<filename>.json \
--method PUT \
--field message="Add <template-name> template config" \
--field branch=<branch> \
--field content=$(echo '<JSON content>' | base64)references/schema.jsoncreate_or_update_fileowner: <configStorage.owner>
repo: <configStorage.repo>
path: <configStorage.path>/<filename>.json
content: <base64编码的JSON>
message: "Add <template-name> template config"
branch: <configStorage.branch>gh api repos/<owner>/<repo>/contents/<path>/<filename>.json \
--method PUT \
--field message="Add <template-name> template config" \
--field branch=<branch> \
--field content=$(echo '<JSON content>' | base64).json~/.claude/configs/github-issue-from-templates/~/.claude/configs/github-issue-from-templates/.jsonget_file_contentsshagh api repos/<owner>/<repo>/contents/<path>/<filename>.json?ref=<branch> --jq '.sha'create_or_update_fileshaowner: <configStorage.owner>
repo: <configStorage.repo>
path: <configStorage.path>/<filename>.json
content: <base64-encoded updated JSON>
message: "Update <template-name> template config"
branch: <configStorage.branch>
sha: <current SHA>gh api repos/<owner>/<repo>/contents/<path>/<filename>.json \
--method PUT \
--field message="Update <template-name> template config" \
--field branch=<branch> \
--field content=$(echo '<updated JSON>' | base64) \
--field sha=<current SHA>get_file_contentsshagh api repos/<owner>/<repo>/contents/<path>/<filename>.json?ref=<branch> --jq '.sha'create_or_update_fileshaowner: <configStorage.owner>
repo: <configStorage.repo>
path: <configStorage.path>/<filename>.json
content: <base64编码的更新后的JSON>
message: "Update <template-name> template config"
branch: <configStorage.branch>
sha: <当前SHA>gh api repos/<owner>/<repo>/contents/<path>/<filename>.json \
--method PUT \
--field message="Update <template-name> template config" \
--field branch=<branch> \
--field content=$(echo '<更新后的JSON>' | base64) \
--field sha=<当前SHA>no responsedocument-statusbmt-team-2no responsedocument-statusbmt-team-2