[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CEB28241PPSFKVCHX7FVND":3,"skill-same:01M6CEB28241PPSFKVCHX7FVND":205},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":36,"linkOnly":37,"markdownContent":38,"markdownBody":39,"frontMatter":40,"refName":41,"commitSha":42,"skillDirectory":43,"forksCount":44,"repositoryHtmlUrl":45,"repositoryHomepageUrl":6,"ownerHtmlUrl":46,"ownerBlogUrl":47,"ownerDescription":48,"updatedAt":49,"install":50,"resources":63},"01M6CEB28241PPSFKVCHX7FVND","architecture-review",null,"Use when reviewing a PR, branch, or staged diff in the openboot repo. Audits the change against project invariants from AGENTS.md — subprocess hygiene, HTTP wrapper usage, error wrapping, dry-run gating, UI helper usage, test placement. Trigger when user says \"review this\", \"check this PR\", \"audit the diff\", or asks about whether a change follows project conventions.","openbootdotdev\u002Fopenboot","openbootdotdev","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F258731499?v=4","01M6CEB0H2QJFM87B03REQN33B","01M6CEB0MWC2NSC2NMM7R5F2PV",278,"MIT","https:\u002F\u002Fgithub.com\u002Fopenbootdotdev\u002Fopenboot\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Farchitecture-review\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35],"architecture","architecture review","review","audit","Wrapper","diff","use","user","check","repo","branch","ui","run","project conventions","pr","http","change","test","2026-11-10 10:12:30",false,"---\nname: architecture-review\ndescription: Use when reviewing a PR, branch, or staged diff in the openboot repo. Audits the change against project invariants from AGENTS.md — subprocess hygiene, HTTP wrapper usage, error wrapping, dry-run gating, UI helper usage, test placement. Trigger when user says \"review this\", \"check this PR\", \"audit the diff\", or asks about whether a change follows project conventions.\n---\n\n# Architecture review for openboot\n\nRun this checklist on any diff before approving it. The checks map 1:1 to\nthe rules in AGENTS.md → \"Project-specific conventions\" and the\nfitness functions in `internal\u002Farchtest`.\n\n## Step 1 — Diff scope\n\nConfirm what's changed:\n\n```bash\ngit diff --stat main...HEAD                 # files\ngit diff main...HEAD -- 'internal\u002F**\u002F*.go'  # production Go\n```\n\nIf the diff spans more than ~10 files or mixes feature + refactor +\ndocs, call that out and suggest splitting — one thing per commit is a\nproject convention.\n\n## Step 2 — Run the mechanical checks first\n\n```bash\ngo vet .\u002F...\nmake test-unit                          # includes archtest\ngolangci-lint run .\u002F...                 # if available\n```\n\nThese catch ~80% of what a human reviewer would otherwise comment on.\n**If they don't pass, stop reviewing and ask the author to fix first.**\n\n## Step 3 — Architecture invariants (manual review of the diff)\n\nFor each changed file under `internal\u002F` or `cmd\u002F`:\n\n| Check | Look for | If violated |\n|---|---|---|\n| Subprocess | New `exec.Command` \u002F `exec.CommandContext` call | Should be in `internal\u002Fsystem` or wrapped in a Runner. Reject + suggest `internal\u002Fsystem.RunCommand`. |\n| HTTP | New `http.NewRequest`, `http.Get`, `http.DefaultClient` | Should go through `internal\u002Fhttputil.Do`. Reject + suggest wrapper. |\n| Home dir | `os.Getenv(\"HOME\")`, hardcoded `\u002FUsers\u002F...`, hardcoded `\"~\u002F\"` | Use `os.UserHomeDir()`. |\n| Error wrap | `return err` without context | Should be `fmt.Errorf(\"doing X: %w\", err)` unless the error is already wrapped one frame up. |\n| UI output | `fmt.Println`, `fmt.Printf` in non-UI packages | Use `ui.Info`, `ui.Success`, etc. (legacy violations are baselined — only flag NEW ones). |\n| Dry run | New destructive operation (mkdir, write, exec, network mutate) | Must check `cfg.DryRun` and print `[DRY-RUN] Would X` instead. |\n| Embedded data | New `data\u002F*.yaml` or schema change | Confirm fallback path still loads. |\n| State path | New file under `~\u002F.openboot\u002F` | Confirm the path is created via `os.UserHomeDir()`, perms are `0o600` for secrets \u002F `0o755` for dirs. |\n\n## Step 4 — Test layer check\n\nFor each non-trivial change:\n\n- **Pure logic** → must have an L1 test in `internal\u002F\u003Cpkg>\u002F`. If missing, request it.\n- **Subprocess interaction** → fake via Runner in `internal\u002F\u003Cpkg>\u002F` OR add a\n  real-subprocess test under `test\u002Fintegration\u002F` (still L1, no build tag).\n- **CLI flag parsing** → table-driven L1 test.\n- **Destructive op** → must run cleanly under `--dry-run` in a test.\n\nIf the change is small enough to land without tests (e.g. comment\nrewording, typo fix), say so explicitly rather than letting it pass\nunmentioned.\n\n## Step 5 — Behaviour invariants\n\n| Check | Why it matters |\n|---|---|\n| Does the change break the curl\\|bash install path? | `scripts\u002Finstall.sh` is the primary install vector. The smoke test CI job covers this — make sure it still passes. |\n| Does the change alter the contract schema (config \u002F snapshot JSON)? | If yes, the schema needs updating in `openboot-contract` repo and bumping. Otherwise the L2 contract job will fail. |\n| Does the change add or change a CLI flag? | Confirm `--help` output is updated, and old-cli compat job still passes (previous release × new mock server). |\n| Does the change touch `data\u002Fpresets.yaml`? | Three presets must still parse and resolve. |\n| Does the change touch `~\u002F.openboot\u002F*` file format? | Confirm backward compat with old files (snapshot, auth, state) or write a migration. |\n\n## Step 6 — Risk assessment\n\nEnd the review with:\n\n- **Risk:** low \u002F medium \u002F high (one sentence on blast radius).\n- **Rollback:** how a user \u002F operator would revert (CLI flag, file delete,\n  brew downgrade).\n- **Observability:** what would tell us this broke in production\n  (telemetry, GitHub issue pattern, smoke job).\n\n## What the reviewer SHOULD NOT do\n\n- Do not approve a change that adds an archtest violation without an\n  updated `baseline\u002F` file and a justification in the commit message.\n- Do not approve mixed-purpose commits — request a split.\n- Do not approve changes to `.github\u002Fworkflows\u002F` without confirming the\n  workflow still runs (`act` locally or trigger on a draft PR).\n- Do not approve direct edits to `data\u002Fpackages.yaml` without confirming\n  the source-of-truth is openboot.dev (see AGENTS.md \"Where to look\").\n","# Architecture review for openboot\n\nRun this checklist on any diff before approving it. The checks map 1:1 to\nthe rules in AGENTS.md → \"Project-specific conventions\" and the\nfitness functions in `internal\u002Farchtest`.\n\n## Step 1 — Diff scope\n\nConfirm what's changed:\n\n```bash\ngit diff --stat main...HEAD                 # files\ngit diff main...HEAD -- 'internal\u002F**\u002F*.go'  # production Go\n```\n\nIf the diff spans more than ~10 files or mixes feature + refactor +\ndocs, call that out and suggest splitting — one thing per commit is a\nproject convention.\n\n## Step 2 — Run the mechanical checks first\n\n```bash\ngo vet .\u002F...\nmake test-unit                          # includes archtest\ngolangci-lint run .\u002F...                 # if available\n```\n\nThese catch ~80% of what a human reviewer would otherwise comment on.\n**If they don't pass, stop reviewing and ask the author to fix first.**\n\n## Step 3 — Architecture invariants (manual review of the diff)\n\nFor each changed file under `internal\u002F` or `cmd\u002F`:\n\n| Check | Look for | If violated |\n|---|---|---|\n| Subprocess | New `exec.Command` \u002F `exec.CommandContext` call | Should be in `internal\u002Fsystem` or wrapped in a Runner. Reject + suggest `internal\u002Fsystem.RunCommand`. |\n| HTTP | New `http.NewRequest`, `http.Get`, `http.DefaultClient` | Should go through `internal\u002Fhttputil.Do`. Reject + suggest wrapper. |\n| Home dir | `os.Getenv(\"HOME\")`, hardcoded `\u002FUsers\u002F...`, hardcoded `\"~\u002F\"` | Use `os.UserHomeDir()`. |\n| Error wrap | `return err` without context | Should be `fmt.Errorf(\"doing X: %w\", err)` unless the error is already wrapped one frame up. |\n| UI output | `fmt.Println`, `fmt.Printf` in non-UI packages | Use `ui.Info`, `ui.Success`, etc. (legacy violations are baselined — only flag NEW ones). |\n| Dry run | New destructive operation (mkdir, write, exec, network mutate) | Must check `cfg.DryRun` and print `[DRY-RUN] Would X` instead. |\n| Embedded data | New `data\u002F*.yaml` or schema change | Confirm fallback path still loads. |\n| State path | New file under `~\u002F.openboot\u002F` | Confirm the path is created via `os.UserHomeDir()`, perms are `0o600` for secrets \u002F `0o755` for dirs. |\n\n## Step 4 — Test layer check\n\nFor each non-trivial change:\n\n- **Pure logic** → must have an L1 test in `internal\u002F\u003Cpkg>\u002F`. If missing, request it.\n- **Subprocess interaction** → fake via Runner in `internal\u002F\u003Cpkg>\u002F` OR add a\n  real-subprocess test under `test\u002Fintegration\u002F` (still L1, no build tag).\n- **CLI flag parsing** → table-driven L1 test.\n- **Destructive op** → must run cleanly under `--dry-run` in a test.\n\nIf the change is small enough to land without tests (e.g. comment\nrewording, typo fix), say so explicitly rather than letting it pass\nunmentioned.\n\n## Step 5 — Behaviour invariants\n\n| Check | Why it matters |\n|---|---|\n| Does the change break the curl\\|bash install path? | `scripts\u002Finstall.sh` is the primary install vector. The smoke test CI job covers this — make sure it still passes. |\n| Does the change alter the contract schema (config \u002F snapshot JSON)? | If yes, the schema needs updating in `openboot-contract` repo and bumping. Otherwise the L2 contract job will fail. |\n| Does the change add or change a CLI flag? | Confirm `--help` output is updated, and old-cli compat job still passes (previous release × new mock server). |\n| Does the change touch `data\u002Fpresets.yaml`? | Three presets must still parse and resolve. |\n| Does the change touch `~\u002F.openboot\u002F*` file format? | Confirm backward compat with old files (snapshot, auth, state) or write a migration. |\n\n## Step 6 — Risk assessment\n\nEnd the review with:\n\n- **Risk:** low \u002F medium \u002F high (one sentence on blast radius).\n- **Rollback:** how a user \u002F operator would revert (CLI flag, file delete,\n  brew downgrade).\n- **Observability:** what would tell us this broke in production\n  (telemetry, GitHub issue pattern, smoke job).\n\n## What the reviewer SHOULD NOT do\n\n- Do not approve a change that adds an archtest violation without an\n  updated `baseline\u002F` file and a justification in the commit message.\n- Do not approve mixed-purpose commits — request a split.\n- Do not approve changes to `.github\u002Fworkflows\u002F` without confirming the\n  workflow still runs (`act` locally or trigger on a draft PR).\n- Do not approve direct edits to `data\u002Fpackages.yaml` without confirming\n  the source-of-truth is openboot.dev (see AGENTS.md \"Where to look\").\n",{"name":5,"description":7},"main","e91cfab35d791527997fa91f39a171f590c3a9c0",".agents\u002Fskills\u002Farchitecture-review",14,"https:\u002F\u002Fgithub.com\u002Fopenbootdotdev\u002Fopenboot","https:\u002F\u002Fgithub.com\u002Fopenbootdotdev","https:\u002F\u002Fopenboot.dev","One-line macOS development environment setup","2026-11-03 15:51:25",{"source":8,"skillName":5,"commands":51,"prompt":61,"zipAvailable":62},[52,55,58],{"tool":53,"command":54},"npx","npx skills add openbootdotdev\u002Fopenboot --skill architecture-review",{"tool":56,"command":57},"bunx","bunx skills add openbootdotdev\u002Fopenboot --skill architecture-review",{"tool":59,"command":60},"pnpm","pnpm dlx skills add openbootdotdev\u002Fopenboot --skill architecture-review","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fopenbootdotdev\u002Fopenboot\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Farchitecture-review\u002FSKILL.md",true,[64,70,74,78,82,86,90,94,98,102,106,110,114,118,122,126,130,134,138,142,148,152,156,160,164,170,174,178,181,185,189,193,197,201],{"path":65,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":68,"sourceHtmlUrl":69},"fixtures\u002Fagent-memory-types-style4.json","REFERENCE","参考文档",4570,"https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftech-graph\u002Ffixtures\u002Fagent-memory-types-style4.json",{"path":71,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":72,"sourceHtmlUrl":73},"fixtures\u002Fapi-flow-style7.json",3387,"https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftech-graph\u002Ffixtures\u002Fapi-flow-style7.json",{"path":75,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":76,"sourceHtmlUrl":77},"fixtures\u002Fmem0-style1.json",7996,"https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftech-graph\u002Ffixtures\u002Fmem0-style1.json",{"path":79,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":80,"sourceHtmlUrl":81},"fixtures\u002Fmicroservices-style3.json",5316,"https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftech-graph\u002Ffixtures\u002Fmicroservices-style3.json",{"path":83,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":84,"sourceHtmlUrl":85},"fixtures\u002Fmulti-agent-style5.json",4001,"https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftech-graph\u002Ffixtures\u002Fmulti-agent-style5.json",{"path":87,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":88,"sourceHtmlUrl":89},"references\u002Fdiagram-catalog.md",5673,"https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftech-graph\u002Freferences\u002Fdiagram-catalog.md",{"path":91,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":92,"sourceHtmlUrl":93},"references\u002Ficons.md",14951,"https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftech-graph\u002Freferences\u002Ficons.md",{"path":95,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":96,"sourceHtmlUrl":97},"references\u002Fstyle-1-flat-icon.md",3235,"https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftech-graph\u002Freferences\u002Fstyle-1-flat-icon.md",{"path":99,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":100,"sourceHtmlUrl":101},"references\u002Fstyle-2-dark-terminal.md",3028,"https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftech-graph\u002Freferences\u002Fstyle-2-dark-terminal.md",{"path":103,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":104,"sourceHtmlUrl":105},"references\u002Fstyle-3-blueprint.md",3412,"https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftech-graph\u002Freferences\u002Fstyle-3-blueprint.md",{"path":107,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":108,"sourceHtmlUrl":109},"references\u002Fstyle-4-notion-clean.md",2828,"https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftech-graph\u002Freferences\u002Fstyle-4-notion-clean.md",{"path":111,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":112,"sourceHtmlUrl":113},"references\u002Fstyle-5-glassmorphism.md",3879,"https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftech-graph\u002Freferences\u002Fstyle-5-glassmorphism.md",{"path":115,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":116,"sourceHtmlUrl":117},"references\u002Fstyle-6-claude-official.md",7052,"https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftech-graph\u002Freferences\u002Fstyle-6-claude-official.md",{"path":119,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":120,"sourceHtmlUrl":121},"references\u002Fstyle-7-openai.md",6972,"https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftech-graph\u002Freferences\u002Fstyle-7-openai.md",{"path":123,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":124,"sourceHtmlUrl":125},"references\u002Fstyle-8-dark-luxury.md",7892,"https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftech-graph\u002Freferences\u002Fstyle-8-dark-luxury.md",{"path":127,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":128,"sourceHtmlUrl":129},"references\u002Fstyle-diagram-matrix.md",7748,"https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftech-graph\u002Freferences\u002Fstyle-diagram-matrix.md",{"path":131,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":132,"sourceHtmlUrl":133},"references\u002Fsvg-authoring-and-recovery.md",2869,"https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftech-graph\u002Freferences\u002Fsvg-authoring-and-recovery.md",{"path":135,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":136,"sourceHtmlUrl":137},"references\u002Fsvg-layout-best-practices.md",3881,"https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftech-graph\u002Freferences\u002Fsvg-layout-best-practices.md",{"path":139,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":140,"sourceHtmlUrl":141},"references\u002Fvisual-vocabulary-and-layout.md",3584,"https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftech-graph\u002Freferences\u002Fvisual-vocabulary-and-layout.md",{"path":143,"resourceType":144,"resourceTypeDesc":145,"sizeBytes":146,"sourceHtmlUrl":147},"scripts\u002Fgenerate-diagram.sh","SCRIPT","脚本",5298,"https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftech-graph\u002Fscripts\u002Fgenerate-diagram.sh",{"path":149,"resourceType":144,"resourceTypeDesc":145,"sizeBytes":150,"sourceHtmlUrl":151},"scripts\u002Fgenerate-from-template.py",65637,"https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftech-graph\u002Fscripts\u002Fgenerate-from-template.py",{"path":153,"resourceType":144,"resourceTypeDesc":145,"sizeBytes":154,"sourceHtmlUrl":155},"scripts\u002Fgenerate-svg-from-lines.py",911,"https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftech-graph\u002Fscripts\u002Fgenerate-svg-from-lines.py",{"path":157,"resourceType":144,"resourceTypeDesc":145,"sizeBytes":158,"sourceHtmlUrl":159},"scripts\u002Ftest-all-styles.sh",4062,"https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftech-graph\u002Fscripts\u002Ftest-all-styles.sh",{"path":161,"resourceType":144,"resourceTypeDesc":145,"sizeBytes":162,"sourceHtmlUrl":163},"scripts\u002Fvalidate-svg.sh",8455,"https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftech-graph\u002Fscripts\u002Fvalidate-svg.sh",{"path":165,"resourceType":166,"resourceTypeDesc":167,"sizeBytes":168,"sourceHtmlUrl":169},"templates\u002Fagent-architecture.svg","ASSET","资产文件",1324,"https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftech-graph\u002Ftemplates\u002Fagent-architecture.svg",{"path":171,"resourceType":166,"resourceTypeDesc":167,"sizeBytes":172,"sourceHtmlUrl":173},"templates\u002Farchitecture.svg",1055,"https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftech-graph\u002Ftemplates\u002Farchitecture.svg",{"path":175,"resourceType":166,"resourceTypeDesc":167,"sizeBytes":176,"sourceHtmlUrl":177},"templates\u002Fcomparison-matrix.svg",612,"https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftech-graph\u002Ftemplates\u002Fcomparison-matrix.svg",{"path":179,"resourceType":166,"resourceTypeDesc":167,"sizeBytes":168,"sourceHtmlUrl":180},"templates\u002Fdata-flow.svg","https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftech-graph\u002Ftemplates\u002Fdata-flow.svg",{"path":182,"resourceType":166,"resourceTypeDesc":167,"sizeBytes":183,"sourceHtmlUrl":184},"templates\u002Fer-diagram.svg",1003,"https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftech-graph\u002Ftemplates\u002Fer-diagram.svg",{"path":186,"resourceType":166,"resourceTypeDesc":167,"sizeBytes":187,"sourceHtmlUrl":188},"templates\u002Fflowchart.svg",860,"https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftech-graph\u002Ftemplates\u002Fflowchart.svg",{"path":190,"resourceType":166,"resourceTypeDesc":167,"sizeBytes":191,"sourceHtmlUrl":192},"templates\u002Fsequence.svg",856,"https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftech-graph\u002Ftemplates\u002Fsequence.svg",{"path":194,"resourceType":166,"resourceTypeDesc":167,"sizeBytes":195,"sourceHtmlUrl":196},"templates\u002Fstate-machine.svg",846,"https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftech-graph\u002Ftemplates\u002Fstate-machine.svg",{"path":198,"resourceType":166,"resourceTypeDesc":167,"sizeBytes":199,"sourceHtmlUrl":200},"templates\u002Ftimeline.svg",832,"https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftech-graph\u002Ftemplates\u002Ftimeline.svg",{"path":202,"resourceType":166,"resourceTypeDesc":167,"sizeBytes":203,"sourceHtmlUrl":204},"templates\u002Fuse-case.svg",947,"https:\u002F\u002Fgithub.com\u002Fngocsangyem\u002FMeowKit\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftech-graph\u002Ftemplates\u002Fuse-case.svg",[206,214,222,227,246],{"skillNo":207,"name":208,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":209,"categories":210,"keywords":211,"publishedAt":36},"01M6CEBFJG99P67S657BG19QX1","ship-pr","https:\u002F\u002Fgithub.com\u002Fopenbootdotdev\u002Fopenboot\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fship-pr\u002FSKILL.md",[],[32,212,213],"ship","ship pr",{"skillNo":215,"name":216,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":217,"categories":218,"keywords":219,"publishedAt":36},"01M6CEBD6NCGP09SNVT7FGQ3AN","bootstrap-feature","https:\u002F\u002Fgithub.com\u002Fopenbootdotdev\u002Fopenboot\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fbootstrap-feature\u002FSKILL.md",[],[220,221],"bootstrap","bootstrap feature",{"skillNo":223,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":224,"categories":225,"keywords":226,"publishedAt":36},"01M6CEBB2Y58WJK0HEGA8BGK9T","https:\u002F\u002Fgithub.com\u002Fopenbootdotdev\u002Fopenboot\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Farchitecture-review\u002FSKILL.md",[],[20,18,19],{"skillNo":228,"name":208,"nameZh":6,"description":229,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":230,"categories":231,"keywords":232,"publishedAt":36},"01M6CEB7Z7VD8CBTACJXW7KBMH","Use when the user is done editing and wants to ship the current branch via a pull request — phrases like \"open a PR\", \"ship it\", \"ship this\", \"submit the PR\", \"let's send it\", \"merge it\", \"land this\", \"提 PR\", \"提个 PR\", \"提个 MR\". Trigger whenever the user signals a change is finished and should head to the default branch, even if they don't say the word \"PR\". Walks the whole branch-to-merge flow for any GitHub repo with a mandatory review gate — the steps and their rules live in the body. Do NOT trigger for `gh pr view` \u002F status checks on an existing PR, for draft \u002F WIP PRs the user wants opened but not merged, or for cutting a release tag.","https:\u002F\u002Fgithub.com\u002Fopenbootdotdev\u002Fopenboot\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fship-pr\u002FSKILL.md",[],[212,32,213,233,234,235,27,28,236,237,238,34,20,239,240,241,242,243,244,245],"flow","default","view","editing","Word","gh pr","open","merge","status","release","git","land","pull",{"skillNo":247,"name":216,"nameZh":6,"description":248,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":249,"categories":250,"keywords":251,"publishedAt":36},"01M6CEB54695DZXA9H6463HWFM","Use when adding a new CLI subcommand or feature to openboot. Walks through the canonical pattern: cobra command registration, runner wiring, archtest awareness, and test placement. Trigger when the user says \"add a command\", \"new subcommand\", \"implement feature X for the CLI\", or starts editing under internal\u002Fcli\u002F.","https:\u002F\u002Fgithub.com\u002Fopenbootdotdev\u002Fopenboot\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fbootstrap-feature\u002FSKILL.md",[],[221,220,252,35,253,236,254,25,24,255],"implement","awareness","command","cli"]