[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6H819ZS4FCF0EQ58H8RDVBV":3,"skill-same:01M6H819ZS4FCF0EQ58H8RDVBV":167},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":29,"publishedAt":52,"linkOnly":53,"markdownContent":54,"markdownBody":55,"frontMatter":56,"refName":59,"commitSha":60,"skillDirectory":61,"forksCount":14,"repositoryHtmlUrl":62,"repositoryHomepageUrl":6,"ownerHtmlUrl":63,"ownerBlogUrl":64,"ownerDescription":65,"updatedAt":66,"install":67,"resources":80},"01M6H819ZS4FCF0EQ58H8RDVBV","go-idiomatic",null,"Go engineering standards for this repo — package layout, error handling, logging, testing, concurrency and design patterns. TRIGGER — load BEFORE writing or editing Go, not after: any .go, go.mod, go.sum or go.work file is touched, Go or Golang is named, or the working directory contains go.mod and the task is implementation, refactor, review or test-writing. Plain feature requests in a Go repo (\"add an endpoint\", \"extract a helper\", \"write a test for this\") count; the user will not say \"idiomatic\". Load it even when another skill (tdd, simplify) is active. SKIP only when no Go file is involved and Go is not named.","O-Marsters-1997\u002Fmy-claude-code","O-Marsters-1997","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F72571979?v=4","01M6H800V7V9BSXYZKDM0JXTJ2","Olly Marsters","01M6H800ZYDJR42TNRH0E6ZVZ7",0,"MIT","https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code\u002Fblob\u002Fmain\u002Fskills\u002Fcode\u002Fgo-idiomatic\u002FSKILL.md",[18,23,26],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000007","代码审查","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":27,"categoryName":28,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计",[30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51],"idiomatic","go idiomatic","go","write","when","sum","error","engineering standards","layout","active","design patterns","only","testing","read","work","Bash","simplify","concurrency","review","directory","writing","design","2026-11-10 10:12:30",false,"---\nname: go-idiomatic\ndescription: >\n  Go engineering standards for this repo — package layout, error handling, logging, testing,\n  concurrency and design patterns. TRIGGER — load BEFORE writing or editing Go, not after: any\n  .go, go.mod, go.sum or go.work file is touched, Go or Golang is named, or the working directory\n  contains go.mod and the task is implementation, refactor, review or test-writing. Plain feature\n  requests in a Go repo (\"add an endpoint\", \"extract a helper\", \"write a test for this\") count;\n  the user will not say \"idiomatic\". Load it even when another skill (tdd, simplify) is active.\n  SKIP only when no Go file is involved and Go is not named.\nallowed-tools: Read, Edit, Write, Glob, Grep, Bash(go:*), Bash(golangci-lint:*), Bash(git:*), Agent\n---\n\n# Go Idiomatic\n\nThis repo's rules for Go, where they differ from or sharpen general Go practice. The rules below\napply to every change; the references hold the detail and worked examples.\n\n## Where to Look\n\nRoute to the right reference before reading further:\n\n| If you're working on…                                                          | Load this                        |\n| ------------------------------------------------------------------------------ | -------------------------------- |\n| Goroutines, channels, sync primitives, errgroup, leaks, races                  | `references\u002Fconcurrency.md`      |\n| Adding a sentinel or error type, translating errors between packages or to HTTP responses, logging where an error came from, cleanup in `defer`, `panic` | `references\u002Ferrors.md` |\n| HTTP middleware: request Content-Type, CSRF, session cookie attributes         | `references\u002Fmiddleware.md`       |\n| Storing session or reset tokens, password reset or change, encrypting a column | `references\u002Fsecrets.md`          |\n| Giving `main` or a component a logger, choosing a level, CLI output vs logs    | `references\u002Flogging.md`          |\n| Interface design, zero values, identifier types, typed value sets, anti-patterns | `references\u002Fpatterns.md`         |\n| Writing or reviewing tests, benchmarks, fuzzing, test databases                | the `go-testing` skill           |\n| Optional fields or return values — when to use `Option[T]`                     | `references\u002Foptional.md`         |\n| Pointer vs value receivers, mutation vs optionality                             | `references\u002Fvalue-vs-pointer.md` |\n| Scaffolding a Go HTTP client for a third-party API, writing a `NewXxxClient`, or attaching auth to outbound HTTP calls | `references\u002Fhttp-client.md` |\n| Shelling out with `os\u002Fexec` to `git`, `gh` or another CLI, parsing its `--json` output, faking it in tests | `references\u002Fexec.md` |\n| Storing data in SQL: store package boundary, transactions, NULLs, constraint errors, pool setup | `references\u002Fdatabase.md` |\n| Rendering `html\u002Ftemplate` for htmx: page vs fragment vs redirect, `HX-*` headers, `.tmpl` files | the `htmx-go-templates` skill |\n\n---\n\n## Errors and Logging\n\nNearly every change returns an error or reports one, so these rules apply to all Go work, not only\nto a task described as error handling:\n\n1. Wrap with `fmt.Errorf(\"\u003Cverb> \u003Cnoun>: %w\", err)`. Error strings are lowercase, with no\n   punctuation and no \"failed to\".\n2. Handle an error once: return it with context, or log it at the top of the chain. Never both.\n3. Export a sentinel only when a caller in another package branches on it. Define it where the\n   condition is detected, and translate a dependency's errors into your own at the package seam.\n4. Never discard an error with `_ =`. Join a cleanup error into the returned error, or log it at\n   `Warn` when there is nothing to return to.\n5. `panic` only for programmer errors: `Must` helpers on constant input, impossible cases.\n6. Only components where an error stops travelling (handlers, workers, long-lived services) take\n   an injected `*slog.Logger`, as a constructor field. Code below them returns errors and takes no\n   logger. `main` builds the one logger; nothing calls `log.*`, `slog.Info` or `slog.Default()`.\n7. Log messages are constant; variable data goes in snake_case key-value attributes, with `err`\n   for the error. Never log secrets or personal data.\n8. Output the user asked for goes to an injected `io.Writer`, not to the logger.\n\nA routine `return fmt.Errorf(...)` or log line needs only these rules. Load `references\u002Ferrors.md`\nwhen adding a sentinel or error type, turning an error into an HTTP response, wrapping a driver or\noutbound-call error, or handling a cleanup error, and `references\u002Flogging.md` when\nwiring a logger, choosing a level or separating CLI output.\n\n---\n\n## Testing\n\nWriting, editing or reviewing a `_test.go` file: load the `go-testing` skill, which owns how Go\ntests are written, including test databases. What to test (the kinds of test, what each is\nworth, the reusable patterns) is the repo's `testing-policy` when it ships one.\n\n---\n\n## Code Organisation\n\n1. Applications keep `main` in `cmd\u002F\u003Capp>\u002Fmain.go`, which only wires dependencies, and everything\n   else under `internal\u002F`. `pkg\u002F` is for library modules imported from outside the repo; in an\n   application it signals a public API that doesn't exist.\n2. Extract shared logic on the **third** repetition across meaningfully different packages, not\n   the second. A helper coupled to one domain lives in `internal\u002F` next to its primary caller.\n3. Name a package by what it does (`stringx`, `idgen`, `timeutil`). `utils` is allowed only when\n   it is used across many packages and imports nothing from `internal\u002F`. `helpers` and `common`\n   are never allowed: a real name is waiting to be found.\n4. No package-level state such as a global `*sql.DB` set in `init()`. Pass dependencies through\n   constructors.\n5. `main` parses the environment once into a typed config struct, validates it, and exits on a bad\n   value at startup rather than on the first request that needs it. Constructors receive only the\n   fields they use, not the whole struct. Nothing below `cmd\u002F` calls `os.Getenv`.\n\n---\n\n## Function Design\n\n1. Past 3–4 arguments, group them into a struct, or use functional options (`opts ...Option`)\n   for a constructor that will grow; a new option is backward-compatible, a new positional\n   argument is not.\n2. Declare complex arguments as named locals before the call instead of nesting constructor\n   calls inline:\n\n   ```go\n   sentAt := time.Now().Add(-24 * time.Hour)\n   priority := Priority(3)\n   client.Send(NewMessage(sender, recipient, sentAt, priority))\n   ```\n\n3. Guard and return early; the happy path stays at the bottom, unindented, with no `else` after a\n   `return`. Use `switch` over `if`\u002F`else if` chains.\n4. Use pointers for mutation and measurably large structs, values for small immutable types.\n   Never use `*T` to mean \"might not be set\"; that is `Option[T]`.\n\n---\n\n## Naming and Comments\n\nName functions by what they return or do (`ParseConfig`, `IsExpired`) and booleans as predicates\n(`canRetry`). Abbreviate only by Go convention (`ctx`, `err`, `id`, `r`, `w`).\n\n`~\u002F.claude\u002Frules\u002Fcomments.md` decides what earns a comment. It is the authority and this\nskill does not restate or soften it. Read it before editing a file and apply it as written,\nincluding its line cap and its exported-identifiers-only rule for doc comments. `internal\u002F`\nis not public API. When reviewing Go code for comment quality, use the `clean-comments` skill.\nDo not instruct it to match the file's existing comment density.\n\n---\n\n## Tooling\n\nRun `gofmt`, `goimports`, `go vet .\u002F...` and `golangci-lint run` before finishing. Leave\nmechanical rules to the linter rather than restating them here. Never add `\u002F\u002Fnolint` to existing\nviolations: fix them, or leave the rule off until they are fixed.\n\n---\n\n## See Also\n\n| Skill                           | When to reach for it                                                        |\n| ------------------------------- | --------------------------------------------------------------------------- |\n| `go-testing`                    | How tests are written: assertions, doubles, tables, test databases          |\n| `tdd`                           | TDD cycle, red-green-refactor, writing the test first                       |\n| `clean-comments`                | Audit and remove explanatory comments across Go code                        |\n| `improve-codebase-architecture` | Identify structural improvements, shallow modules                           |\n| `simplify`                      | Review changed code for quality, reuse, and efficiency after implementation |\n","# Go Idiomatic\n\nThis repo's rules for Go, where they differ from or sharpen general Go practice. The rules below\napply to every change; the references hold the detail and worked examples.\n\n## Where to Look\n\nRoute to the right reference before reading further:\n\n| If you're working on…                                                          | Load this                        |\n| ------------------------------------------------------------------------------ | -------------------------------- |\n| Goroutines, channels, sync primitives, errgroup, leaks, races                  | `references\u002Fconcurrency.md`      |\n| Adding a sentinel or error type, translating errors between packages or to HTTP responses, logging where an error came from, cleanup in `defer`, `panic` | `references\u002Ferrors.md` |\n| HTTP middleware: request Content-Type, CSRF, session cookie attributes         | `references\u002Fmiddleware.md`       |\n| Storing session or reset tokens, password reset or change, encrypting a column | `references\u002Fsecrets.md`          |\n| Giving `main` or a component a logger, choosing a level, CLI output vs logs    | `references\u002Flogging.md`          |\n| Interface design, zero values, identifier types, typed value sets, anti-patterns | `references\u002Fpatterns.md`         |\n| Writing or reviewing tests, benchmarks, fuzzing, test databases                | the `go-testing` skill           |\n| Optional fields or return values — when to use `Option[T]`                     | `references\u002Foptional.md`         |\n| Pointer vs value receivers, mutation vs optionality                             | `references\u002Fvalue-vs-pointer.md` |\n| Scaffolding a Go HTTP client for a third-party API, writing a `NewXxxClient`, or attaching auth to outbound HTTP calls | `references\u002Fhttp-client.md` |\n| Shelling out with `os\u002Fexec` to `git`, `gh` or another CLI, parsing its `--json` output, faking it in tests | `references\u002Fexec.md` |\n| Storing data in SQL: store package boundary, transactions, NULLs, constraint errors, pool setup | `references\u002Fdatabase.md` |\n| Rendering `html\u002Ftemplate` for htmx: page vs fragment vs redirect, `HX-*` headers, `.tmpl` files | the `htmx-go-templates` skill |\n\n---\n\n## Errors and Logging\n\nNearly every change returns an error or reports one, so these rules apply to all Go work, not only\nto a task described as error handling:\n\n1. Wrap with `fmt.Errorf(\"\u003Cverb> \u003Cnoun>: %w\", err)`. Error strings are lowercase, with no\n   punctuation and no \"failed to\".\n2. Handle an error once: return it with context, or log it at the top of the chain. Never both.\n3. Export a sentinel only when a caller in another package branches on it. Define it where the\n   condition is detected, and translate a dependency's errors into your own at the package seam.\n4. Never discard an error with `_ =`. Join a cleanup error into the returned error, or log it at\n   `Warn` when there is nothing to return to.\n5. `panic` only for programmer errors: `Must` helpers on constant input, impossible cases.\n6. Only components where an error stops travelling (handlers, workers, long-lived services) take\n   an injected `*slog.Logger`, as a constructor field. Code below them returns errors and takes no\n   logger. `main` builds the one logger; nothing calls `log.*`, `slog.Info` or `slog.Default()`.\n7. Log messages are constant; variable data goes in snake_case key-value attributes, with `err`\n   for the error. Never log secrets or personal data.\n8. Output the user asked for goes to an injected `io.Writer`, not to the logger.\n\nA routine `return fmt.Errorf(...)` or log line needs only these rules. Load `references\u002Ferrors.md`\nwhen adding a sentinel or error type, turning an error into an HTTP response, wrapping a driver or\noutbound-call error, or handling a cleanup error, and `references\u002Flogging.md` when\nwiring a logger, choosing a level or separating CLI output.\n\n---\n\n## Testing\n\nWriting, editing or reviewing a `_test.go` file: load the `go-testing` skill, which owns how Go\ntests are written, including test databases. What to test (the kinds of test, what each is\nworth, the reusable patterns) is the repo's `testing-policy` when it ships one.\n\n---\n\n## Code Organisation\n\n1. Applications keep `main` in `cmd\u002F\u003Capp>\u002Fmain.go`, which only wires dependencies, and everything\n   else under `internal\u002F`. `pkg\u002F` is for library modules imported from outside the repo; in an\n   application it signals a public API that doesn't exist.\n2. Extract shared logic on the **third** repetition across meaningfully different packages, not\n   the second. A helper coupled to one domain lives in `internal\u002F` next to its primary caller.\n3. Name a package by what it does (`stringx`, `idgen`, `timeutil`). `utils` is allowed only when\n   it is used across many packages and imports nothing from `internal\u002F`. `helpers` and `common`\n   are never allowed: a real name is waiting to be found.\n4. No package-level state such as a global `*sql.DB` set in `init()`. Pass dependencies through\n   constructors.\n5. `main` parses the environment once into a typed config struct, validates it, and exits on a bad\n   value at startup rather than on the first request that needs it. Constructors receive only the\n   fields they use, not the whole struct. Nothing below `cmd\u002F` calls `os.Getenv`.\n\n---\n\n## Function Design\n\n1. Past 3–4 arguments, group them into a struct, or use functional options (`opts ...Option`)\n   for a constructor that will grow; a new option is backward-compatible, a new positional\n   argument is not.\n2. Declare complex arguments as named locals before the call instead of nesting constructor\n   calls inline:\n\n   ```go\n   sentAt := time.Now().Add(-24 * time.Hour)\n   priority := Priority(3)\n   client.Send(NewMessage(sender, recipient, sentAt, priority))\n   ```\n\n3. Guard and return early; the happy path stays at the bottom, unindented, with no `else` after a\n   `return`. Use `switch` over `if`\u002F`else if` chains.\n4. Use pointers for mutation and measurably large structs, values for small immutable types.\n   Never use `*T` to mean \"might not be set\"; that is `Option[T]`.\n\n---\n\n## Naming and Comments\n\nName functions by what they return or do (`ParseConfig`, `IsExpired`) and booleans as predicates\n(`canRetry`). Abbreviate only by Go convention (`ctx`, `err`, `id`, `r`, `w`).\n\n`~\u002F.claude\u002Frules\u002Fcomments.md` decides what earns a comment. It is the authority and this\nskill does not restate or soften it. Read it before editing a file and apply it as written,\nincluding its line cap and its exported-identifiers-only rule for doc comments. `internal\u002F`\nis not public API. When reviewing Go code for comment quality, use the `clean-comments` skill.\nDo not instruct it to match the file's existing comment density.\n\n---\n\n## Tooling\n\nRun `gofmt`, `goimports`, `go vet .\u002F...` and `golangci-lint run` before finishing. Leave\nmechanical rules to the linter rather than restating them here. Never add `\u002F\u002Fnolint` to existing\nviolations: fix them, or leave the rule off until they are fixed.\n\n---\n\n## See Also\n\n| Skill                           | When to reach for it                                                        |\n| ------------------------------- | --------------------------------------------------------------------------- |\n| `go-testing`                    | How tests are written: assertions, doubles, tables, test databases          |\n| `tdd`                           | TDD cycle, red-green-refactor, writing the test first                       |\n| `clean-comments`                | Audit and remove explanatory comments across Go code                        |\n| `improve-codebase-architecture` | Identify structural improvements, shallow modules                           |\n| `simplify`                      | Review changed code for quality, reuse, and efficiency after implementation |\n",{"name":5,"description":57,"allowed-tools":58},"Go engineering standards for this repo — package layout, error handling, logging, testing, concurrency and design patterns. TRIGGER — load BEFORE writing or editing Go, not after: any .go, go.mod, go.sum or go.work file is touched, Go or Golang is named, or the working directory contains go.mod and the task is implementation, refactor, review or test-writing. Plain feature requests in a Go repo (\"add an endpoint\", \"extract a helper\", \"write a test for this\") count; the user will not say \"idiomatic\". Load it even when another skill (tdd, simplify) is active. SKIP only when no Go file is involved and Go is not named.\n","Read, Edit, Write, Glob, Grep, Bash(go:*), Bash(golangci-lint:*), Bash(git:*), Agent","main","aede9f7bc29a2d9127fa7ce29682c242596c7759","skills\u002Fcode\u002Fgo-idiomatic","https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code","https:\u002F\u002Fgithub.com\u002FO-Marsters-1997","https:\u002F\u002Fpersonal-portfolio-v2-phi.vercel.app","Go & TypeScript developer building tooling for AI-assisted development: git worktree workflows, Claude Code skills and agent orchestration.","2026-11-11 22:26:34",{"source":8,"skillName":5,"commands":68,"prompt":78,"zipAvailable":79},[69,72,75],{"tool":70,"command":71},"npx","npx skills add O-Marsters-1997\u002Fmy-claude-code --skill go-idiomatic",{"tool":73,"command":74},"bunx","bunx skills add O-Marsters-1997\u002Fmy-claude-code --skill go-idiomatic",{"tool":76,"command":77},"pnpm","pnpm dlx skills add O-Marsters-1997\u002Fmy-claude-code --skill go-idiomatic","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code\u002Fblob\u002Fmain\u002Fskills\u002Fcode\u002Fgo-idiomatic\u002FSKILL.md",true,[81,87,93,99,103,107,111,115,119,123,127,131,135,139,143,147,151,155,159,163],{"path":82,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":85,"sourceHtmlUrl":86},"evals\u002Fevals.json","REFERENCE","参考文档",9764,"https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code\u002Fblob\u002Fmain\u002Fskills\u002Fcode\u002Fgo-idiomatic\u002Fevals\u002Fevals.json",{"path":88,"resourceType":89,"resourceTypeDesc":90,"sizeBytes":91,"sourceHtmlUrl":92},"evals\u002Ffiles\u002Foptional-field\u002Fgo.mod","OTHER","其他",37,"https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code\u002Fblob\u002Fmain\u002Fskills\u002Fcode\u002Fgo-idiomatic\u002Fevals\u002Ffiles\u002Foptional-field\u002Fgo.mod",{"path":94,"resourceType":95,"resourceTypeDesc":96,"sizeBytes":97,"sourceHtmlUrl":98},"evals\u002Ffiles\u002Foptional-field\u002Finternal\u002Fuser\u002Fuser.go","SCRIPT","脚本",313,"https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code\u002Fblob\u002Fmain\u002Fskills\u002Fcode\u002Fgo-idiomatic\u002Fevals\u002Ffiles\u002Foptional-field\u002Finternal\u002Fuser\u002Fuser.go",{"path":100,"resourceType":89,"resourceTypeDesc":90,"sizeBytes":101,"sourceHtmlUrl":102},"evals\u002Ffiles\u002Frefactor-store\u002Fgo.mod",34,"https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code\u002Fblob\u002Fmain\u002Fskills\u002Fcode\u002Fgo-idiomatic\u002Fevals\u002Ffiles\u002Frefactor-store\u002Fgo.mod",{"path":104,"resourceType":95,"resourceTypeDesc":96,"sizeBytes":105,"sourceHtmlUrl":106},"evals\u002Ffiles\u002Frefactor-store\u002Fhelpers\u002Fhelpers.go",125,"https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code\u002Fblob\u002Fmain\u002Fskills\u002Fcode\u002Fgo-idiomatic\u002Fevals\u002Ffiles\u002Frefactor-store\u002Fhelpers\u002Fhelpers.go",{"path":108,"resourceType":95,"resourceTypeDesc":96,"sizeBytes":109,"sourceHtmlUrl":110},"evals\u002Ffiles\u002Frefactor-store\u002Fstore\u002Fstore.go",979,"https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code\u002Fblob\u002Fmain\u002Fskills\u002Fcode\u002Fgo-idiomatic\u002Fevals\u002Ffiles\u002Frefactor-store\u002Fstore\u002Fstore.go",{"path":112,"resourceType":95,"resourceTypeDesc":96,"sizeBytes":113,"sourceHtmlUrl":114},"evals\u002Ffiles\u002Fserver-settings\u002Fcmd\u002Fapp\u002Fmain.go",248,"https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code\u002Fblob\u002Fmain\u002Fskills\u002Fcode\u002Fgo-idiomatic\u002Fevals\u002Ffiles\u002Fserver-settings\u002Fcmd\u002Fapp\u002Fmain.go",{"path":116,"resourceType":89,"resourceTypeDesc":90,"sizeBytes":117,"sourceHtmlUrl":118},"evals\u002Ffiles\u002Fserver-settings\u002Fgo.mod",32,"https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code\u002Fblob\u002Fmain\u002Fskills\u002Fcode\u002Fgo-idiomatic\u002Fevals\u002Ffiles\u002Fserver-settings\u002Fgo.mod",{"path":120,"resourceType":95,"resourceTypeDesc":96,"sizeBytes":121,"sourceHtmlUrl":122},"evals\u002Ffiles\u002Fserver-settings\u002Finternal\u002Fserver\u002Fserver.go",275,"https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code\u002Fblob\u002Fmain\u002Fskills\u002Fcode\u002Fgo-idiomatic\u002Fevals\u002Ffiles\u002Fserver-settings\u002Finternal\u002Fserver\u002Fserver.go",{"path":124,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":125,"sourceHtmlUrl":126},"references\u002Fconcurrency.md",14658,"https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code\u002Fblob\u002Fmain\u002Fskills\u002Fcode\u002Fgo-idiomatic\u002Freferences\u002Fconcurrency.md",{"path":128,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":129,"sourceHtmlUrl":130},"references\u002Fdatabase.md",6143,"https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code\u002Fblob\u002Fmain\u002Fskills\u002Fcode\u002Fgo-idiomatic\u002Freferences\u002Fdatabase.md",{"path":132,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":133,"sourceHtmlUrl":134},"references\u002Ferrors.md",9350,"https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code\u002Fblob\u002Fmain\u002Fskills\u002Fcode\u002Fgo-idiomatic\u002Freferences\u002Ferrors.md",{"path":136,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":137,"sourceHtmlUrl":138},"references\u002Fexec.md",5033,"https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code\u002Fblob\u002Fmain\u002Fskills\u002Fcode\u002Fgo-idiomatic\u002Freferences\u002Fexec.md",{"path":140,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":141,"sourceHtmlUrl":142},"references\u002Fhttp-client.md",2777,"https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code\u002Fblob\u002Fmain\u002Fskills\u002Fcode\u002Fgo-idiomatic\u002Freferences\u002Fhttp-client.md",{"path":144,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":145,"sourceHtmlUrl":146},"references\u002Flogging.md",3240,"https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code\u002Fblob\u002Fmain\u002Fskills\u002Fcode\u002Fgo-idiomatic\u002Freferences\u002Flogging.md",{"path":148,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":149,"sourceHtmlUrl":150},"references\u002Fmiddleware.md",2917,"https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code\u002Fblob\u002Fmain\u002Fskills\u002Fcode\u002Fgo-idiomatic\u002Freferences\u002Fmiddleware.md",{"path":152,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":153,"sourceHtmlUrl":154},"references\u002Foptional.md",5118,"https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code\u002Fblob\u002Fmain\u002Fskills\u002Fcode\u002Fgo-idiomatic\u002Freferences\u002Foptional.md",{"path":156,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":157,"sourceHtmlUrl":158},"references\u002Fpatterns.md",4132,"https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code\u002Fblob\u002Fmain\u002Fskills\u002Fcode\u002Fgo-idiomatic\u002Freferences\u002Fpatterns.md",{"path":160,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":161,"sourceHtmlUrl":162},"references\u002Fsecrets.md",3089,"https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code\u002Fblob\u002Fmain\u002Fskills\u002Fcode\u002Fgo-idiomatic\u002Freferences\u002Fsecrets.md",{"path":164,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":165,"sourceHtmlUrl":166},"references\u002Fvalue-vs-pointer.md",3609,"https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code\u002Fblob\u002Fmain\u002Fskills\u002Fcode\u002Fgo-idiomatic\u002Freferences\u002Fvalue-vs-pointer.md",[168,176,183,211,237,264],{"skillNo":169,"name":170,"nameZh":6,"description":171,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":172,"categories":173,"keywords":174,"publishedAt":175},"01M745F5J4Z2W32G4QXESCN5PM","vault-recall","Answer the user's conceptual or technical question using their Obsidian vault as well as general knowledge. Use when the user asks a question (not a task) whose topic appears in the vault MOC digest from session start. Not for task instructions, not mid-task, and not for writing to the vault (that is to-vault).","https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code\u002Fblob\u002Fmain\u002Fskills\u002Fproductivity\u002Fvault-recall\u002FSKILL.md",[],[],"2026-11-11 15:11:14",{"skillNo":177,"name":178,"nameZh":6,"description":179,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":180,"categories":181,"keywords":182,"publishedAt":175},"01M745EW5W0A7K9016Z54A4KG2","ingest","Ingest one external source (an article, course lesson, doc, PDF or URL) into the user's Obsidian vault: save the original to raw\u002F, then build wiki\u002F pages per the vault's § Ingest. Use when the user types \u002Fingest, or says \"ingest this\", \"add this source to my wiki\", \"put this article\u002Flesson in the vault as a wiki page\". Works from any repo. Routing rule: someone else's words go to wiki\u002F (this skill); the user's own learnings and decisions go to notes\u002F (\u002Fto-vault).","https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code\u002Fblob\u002Fmain\u002Fskills\u002Fproductivity\u002Fingest\u002FSKILL.md",[],[],{"skillNo":184,"name":185,"nameZh":6,"description":186,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":187,"categories":188,"keywords":189,"publishedAt":52},"01M6H88J6TYRV9T8RKWW569YM8","to-tickets","Breaks a source into independently-grabbable GitHub tickets. For a code feature the source is the plan (`docs\u002Fplans\u002F\u003Cfeature>.md`, from \u002Fto-plan) and every new or changed symbol lands in exactly one ticket, its signatures copied into the ticket body; a non-code feature is cut from the PRD's slices. Cuts tickets for one feature per run. If a code feature has no approved plan, offers \u002Fto-plan instead of cutting from prose. In a repo that runs command-centre, also emits `[[task]]` blocks into its config; in a plain treepad repo, emits a Batch Manifest instead so the tickets materialise as stacked worktrees.","https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code\u002Fblob\u002Fmain\u002Fskills\u002Fworkflow\u002Fto-tickets\u002FSKILL.md",[],[190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210],"tickets","to tickets","new","signatures","github","plan","batch","task","code","manifest","plans","true","ticket","command","repo","for","feature","run","worktrees","as","cut",{"skillNo":212,"name":213,"nameZh":6,"description":214,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":215,"categories":216,"keywords":220,"publishedAt":52},"01M6H88E98X9KGGYBGSVDS1E8H","to-seams","Records an agreed-but-unlanded cross-repo interface as a seam: the file a consumer's agent gets pasted into its prompt as ground truth, plus the `[[seam]]` block command-centre reads for the retirement pointer. Use when two repos need to build against an interface neither has landed yet — \"record a seam for X\", \"we agreed on this schema, seam it\", \"add a seam so Y can build against Z's new field\". Halts for approval before writing either file.","https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code\u002Fblob\u002Fmain\u002Fskills\u002Fworkflow\u002Fto-seams\u002FSKILL.md",[217],{"categoryNo":218,"categoryName":219,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[221,222,192,223,224,225,226,227,228,229,50,34,230,201,231,232,233,204,205,234,235,236,209,203],"to seams","schema","neither","it","but","file","prompt","either","use","interface","repos","block","records","build","can","record",{"skillNo":238,"name":239,"nameZh":6,"description":240,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":241,"categories":242,"keywords":248,"publishedAt":52},"01M6H889PSQM2E1ATS2JC10QRV","to-roadmap","Prioritises settled features into a Now \u002F Next \u002F Later kanban board, rendered as a self-contained .\u002Fideas\u002Froadmap.html. Each card is a feature, not a ticket — one card later becomes several tickets via \u002Fto-prd -> \u002Fto-plan -> \u002Fto-tickets. Boards the features in .\u002Fdocs\u002Fapproach.md, or the \"## Accepted ideas\" in .\u002Fideas\u002FCONTEXT.md when there is no approach doc. The approach doc is settled truth: this assigns tiers and reasons about ordering, it never re-litigates what was decided.","https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code\u002Fblob\u002Fmain\u002Fskills\u002Fworkflow\u002Fto-roadmap\u002FSKILL.md",[243],{"categoryNo":244,"categoryName":245,"taxonomyType":246,"taxonomyTypeDesc":247},"01JBSEEDCAT000000000000031","产品经理","PROFESSION","适用职业",[249,250,251,209,206,252,253,34,254,255,256,190,257,258,195,259,260,201,202,261,262,263],"to roadmap","roadmap","never","via","features","doc","board","about","next","later","self","now","card","re","ideas",{"skillNo":265,"name":266,"nameZh":6,"description":267,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":268,"categories":269,"keywords":271,"publishedAt":52},"01M6H885QAK839Q771ZBKBK1KA","to-prd","Turns one feature idea into a PRD built on journeys: a one-line problem, journeys (each ending in an observable state) and delivery slices that say what is usable after each. Interviews, explores the codebase, and saves to docs\u002Fprds\u002F\u003Cfeature>.md. Covers exactly one feature: given a multi-feature source, ask which one. Reads any approach doc or ideate report as priors so it doesn't re-ask what's settled, but needs none. Starts the per-feature spine (\u002Fto-prd -> \u002Fto-plan -> \u002Fto-tickets).","https:\u002F\u002Fgithub.com\u002FO-Marsters-1997\u002Fmy-claude-code\u002Fblob\u002Fmain\u002Fskills\u002Fworkflow\u002Fto-prd\u002FSKILL.md",[270],{"categoryNo":244,"categoryName":245,"taxonomyType":246,"taxonomyTypeDesc":247},[272,273,274,275,276,277,278,279,190,280,195,281,282,283,201,262,206,284,285,209],"prd","to prd","say","interviews","codebase","report","line","delivery","spine","state","multi","ask","problem","which"]