FIXME Resolver
tailcallhq/forgecode
Finds every FIXME comment in a codebase, groups related ones across files into one task, implements the work they describe and removes the comments once it is done.
Go coding standards and conventions for this project. An agent skill from JanDeDobbeleer/oh-my-posh.
$ npx skills add JanDeDobbeleer/oh-my-posh --skill golang -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install JanDeDobbeleer/oh-my-posh golang --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/JanDeDobbeleer/oh-my-posh.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/golang .claude/skills/golang && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "golang" agent skill from https://github.com/JanDeDobbeleer/oh-my-posh/tree/main/.agents/skills/golang into .claude/skills/golang/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "golang", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/JanDeDobbeleer/oh-my-posh/tree/main/.agents/skills/golangType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add JanDeDobbeleer/oh-my-posh --skill golang -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install JanDeDobbeleer/oh-my-posh golang --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/JanDeDobbeleer/oh-my-posh.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/golang .agents/skills/golang && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "golang" agent skill from https://github.com/JanDeDobbeleer/oh-my-posh/tree/main/.agents/skills/golang into .agents/skills/golang/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "golang", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add JanDeDobbeleer/oh-my-posh --skill golang -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install JanDeDobbeleer/oh-my-posh golang --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/JanDeDobbeleer/oh-my-posh.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/golang .cursor/skills/golang && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "golang" agent skill from https://github.com/JanDeDobbeleer/oh-my-posh/tree/main/.agents/skills/golang into .cursor/skills/golang/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "golang", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/JanDeDobbeleer/oh-my-posh.git --path .agents/skills/golang--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add JanDeDobbeleer/oh-my-posh --skill golang -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install JanDeDobbeleer/oh-my-posh golang --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/JanDeDobbeleer/oh-my-posh.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/golang .gemini/skills/golang && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "golang" agent skill from https://github.com/JanDeDobbeleer/oh-my-posh/tree/main/.agents/skills/golang into .gemini/skills/golang/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "golang", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install JanDeDobbeleer/oh-my-posh golangInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add JanDeDobbeleer/oh-my-posh --skill golang -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/JanDeDobbeleer/oh-my-posh.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/golang .github/skills/golang && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "golang" agent skill from https://github.com/JanDeDobbeleer/oh-my-posh/tree/main/.agents/skills/golang into .github/skills/golang/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "golang", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add JanDeDobbeleer/oh-my-posh --skill golang -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install JanDeDobbeleer/oh-my-posh golang --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/JanDeDobbeleer/oh-my-posh.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/golang .opencode/skills/golang && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "golang" agent skill from https://github.com/JanDeDobbeleer/oh-my-posh/tree/main/.agents/skills/golang into .opencode/skills/golang/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "golang", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
golangGo coding standards and conventions for this project. An agent skill from JanDeDobbeleer/oh-my-posh.
Golang is an agent skill from JanDeDobbeleer/oh-my-posh. Go coding standards and conventions for this project. Apply when writing, reviewing, or refactoring any Go source file.
Its SKILL.md is about 4.3k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development, covering Code quality and Refactoring. It works with Go and Bash. The repository describes itself as: The most customisable and low-latency cross platform/shell prompt renderer. The licence is MIT.
2 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit ba7d216. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gogitFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
go.devgoogle.github.ioFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Golang loads about 4.3k tokens when it runs. Until then it costs about 32 tokens; SKILL.md has 2,025 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from JanDeDobbeleer/oh-my-posh at commit ba7d216, republished under its MIT licence (© JanDeDobbeleer). 2,025 words, ~4,257 tokens.
.claude/skills/golang/SKILL.md (or your agent's skills folder).Follow idiomatic Go practices and community standards when writing Go code. These instructions are based on Effective Go, Go Code Review Comments, and Google's Go Style Guide.
else statements - use early returns, continue, or break instead_ characters, hyphens, or mixedCapsutil, common, or base_ charactershttp.HTTPServer, prefer http.Server)Reader, Writer, Formatter)Read → Reader)const blocksgofmt to format codegoimports to manage imports automatically//) for most comments/* */) sparingly, mainly for package documentation_ unless you have a good reason (document why)fmt.Errorf with %w verberrlog package for logginglog.Error(err)log package handle itdefer log.Trace(time.Now(), args)
where args are the function arguments at the start of the function.else statements - they create unnecessary nesting and reduce readabilitycontinue in loops to skip to the next iteration instead of nestingbreak to exit loops early instead of complex conditional logic❌ BAD - Don't do this:
func processEntry(entry *Entry) string {
if entry.Expired() {
return "expired"
} else {
if entry.TTL < 0 {
return "never expires"
} else {
return fmt.Sprintf("expires at %s", time.Unix(entry.Timestamp, 0))
}
}
}✅ GOOD - Do this instead:
func processEntry(entry *Entry) string {
if entry.Expired() {
return "expired"
}
if entry.TTL < 0 {
return "never expires"
}
return fmt.Sprintf("expires at %s", time.Unix(entry.Timestamp, 0))
}❌ BAD - Nested loop logic:
for _, item := range items {
if item.IsValid() {
if item.ShouldProcess() {
// complex processing logic
}
}
}✅ GOOD - Early continue:
for _, item := range items {
if !item.IsValid() {
continue
}
if !item.ShouldProcess() {
continue
}
// complex processing logic (happy path)
}go.mod and go.sum)go mod tidy to clean up unused dependenciessync.WaitGroup or channels to wait for goroutinesselect for non-blocking operationssync.Mutex for protecting shared statesync.RWMutex when you have many readerssync.Once for one-time initializationerrors.New for simple static errorsfmt.Errorf for errors with runtime valueserrors.Is and errors.As for error checkingsync.Pool)pprof)testing.B for benchmarks_test package suffix for black-box testing_test.go suffixTestFunctionNameScenariot.Run for better organizationtestify/assert and testify/require for assertionslibtime for the time package.Before adding a test, name the observable behavior or invariant it proves. A regression test must fail on the code before the fix for the same reason as the reported bug, pass after the fix, and permit correct internal refactors.
Do not add tests that inspect source code or embedded text for a symbol, statement, condition, string, or the relative order of statements in the code. Such tests prove that a patch has a particular shape, not that the behavior works. Text assertions are appropriate when the emitted text is itself the contract, such as generated commands, escaping, serialization, or required output encoding.
Test behavior in the runtime that owns it. A Go test must not inspect an embedded shell script to claim that shell host behavior works; use a shell integration test instead. If the available infrastructure cannot exercise the regression, state the missing coverage and required manual verification rather than adding a proxy test that cannot catch the bug.
Use these checks for every new test:
If either answer is yes, redesign or remove the test.
One behavior under test = one test function with a table of cases. Never write several
near-identical test functions that differ in input data, fixtures, or expected outcome, because
those differences are table fields. A per-case fixture (a different map, config, or mock return)
is not a reason to split; put the fixture in the table. Shared setup (mocks, caches, Init
calls) runs once before the loop.
When adding cases to an existing test file, extend the existing table instead of adding a new test function.
Split into separate test functions when the flow genuinely differs: a different API under test, or a setup/assertion sequence that cannot be expressed as table fields.
// ✅ CORRECT: fixture and error expectation are table fields
cases := []struct {
Fixture Palette
Case string
Input Ansi
Expected Ansi
ExpectedError bool
}{
{Case: "literal", Fixture: Palette{"a": "#123456"}, Input: "p:a", Expected: "#123456"},
{Case: "invalid", Fixture: Palette{"a": "{{ broken"}, Input: "p:a", ExpectedError: true},
}
// ❌ WRONG: TestResolveLiteral, TestResolveReference, TestResolveInvalid —
// three functions repeating the same setup with different datat.Helper()testing.TB interface for functions used in tests and benchmarkst.Cleanup()When a test mutates package-level variables (resolvers, loggers, clocks, time.Local, etc.),
save the original value into a local variable and restore it via t.Cleanup. Never restore to a
hardcoded value; you would overwrite whatever state preceded your test.
// ✅ CORRECT: save original, restore original
origResolver := myPackageResolver
t.Cleanup(func() { myPackageResolver = origResolver })
myPackageResolver = fakeResolver
origLocal := time.Local
t.Cleanup(func() { time.Local = origLocal })
time.Local = time.UTC
// ❌ WRONG: restores to a hardcoded value instead of the pre-test value
defer func() { time.Local = time.FixedZone("UTC", 0) }()go fmt: Format codego vet: Find suspicious constructsgolint or golangci-lint: Additional lintinggo test: Run testsgo mod: Manage dependenciesgo generate: Code generationREQUIRED BEFORE EVERY COMMIT. Run the following commands in sequence after any Go code change. Commit after all pass with zero errors. Never skip this step; these linters catch real bugs and style violations that will be flagged in CI or code review.
Code Modernization: Apply modern Go best practices; this rewrites files in place
modernize --fix "./..."
modernizemodifies source files (e.g. replacingstrings.Splitwithstrings.SplitSeqfor Go 1.24+ range loops). Always stage its changes and include them in the same commit as your feature code.
Field Alignment: Optimize struct field ordering for memory efficiency; this rewrites files in place
fieldalignment --fix "./..."Warning:
fieldalignmentrewrites struct field order. Any inline struct literals that use positional (unnamed) field initialization (common in table-driven test files) will break after the reorder. Always use named fields in struct literals (e.g.{Case: "foo", Now: t}) so that the order of fields in the struct definition does not matter.
Dependency Management: Clean up and organize module dependencies
go mod tidyFormatting and Linting: Ensure code follows standards (must report zero errors)
gofmt -w .
golangci-lint runAfter steps 1 through 3, always run git diff to review auto-applied changes before staging them.
All four steps must complete with zero errors before the commit is created.
_unix.go, _windows.go, _darwin.go, _js.go)These suffixes, and an explicit //go:build constraint, are how a file is bound to one target.
The toolchain type-checks and lints the files selected for the host and nothing else, so a
violation in another platform's file ships silently.
If you add or modify such a file, also cross-compile to catch issues the local OS linter skips. On Windows, run:
$env:GOOS = "linux"; go build ./...; $env:GOOS = ""On Linux/macOS, run:
GOOS=windows go build ./...This catches import mismatches, missing symbols, and linter rules (like modernize
strings.SplitSeq) that apply on the non-host platform. Run golangci-lint run under the same
GOOS so the lint rules are covered too, not the build alone.
These rules frequently fire on new code and are quick to resolve before linting:
| Linter | Trigger | Fix |
|---|---|---|
goconst | Same string literal occurs 3+ times | Extract to a named const |
gofmt | Incorrect indentation or comment spacing | Run gofmt -w .; it fixes automatically |
dupl | Two functions/test cases with near-identical structure | Add //nolint:dupl with a brief reason comment |
modernize | strings.Split used in a for range (Go 1.24+) | Run modernize --fix "./..." (auto-fixes) |
interface{} or any)© JanDeDobbeleer, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/golang of JanDeDobbeleer/oh-my-posh.
Open the folder on GitHubat commit ba7d216
Golang next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Golang this skillJanDeDobbeleer/oh-my-posh | 24k | — | ~4.3k | Automated safety check: Pass | MIT | |
| FIXME Resolvertailcallhq/forgecode | 7.6k | — | ~1.1k | Automated safety check: Pass | Apache-2.0 | |
| Go AST Code Introspectionpilinux/gorest | 506 | — | ~414 | Automated safety check: Pass | MIT | |
| Systematic Code Refactoringluongnv89/claude-howto | 42k | — | ~3k | Automated safety check: Pass | MIT | |
| Ponytail Lazy Developer ModeDietrichGebert/ponytail | 159k | — | ~873 | Automated safety check: Pass | MIT | |
| Dignified Python Standardsdocling-project/docling | 69k | — | ~1.5k | Automated safety check: Pass | Apache-2.0 |
tailcallhq/forgecode
Finds every FIXME comment in a codebase, groups related ones across files into one task, implements the work they describe and removes the comments once it is done.
pilinux/gorest
Enumerates Go declarations and signatures from the syntax tree, then proposes small, mechanically safe refactors with file and line citations.
luongnv89/claude-howto
Guides refactoring in phases based on Martin Fowler's method: research, test coverage check, planning and small tested steps, with your approval at each phase.
DietrichGebert/ponytail
Makes the agent pick the laziest solution that works: skip unneeded work, reuse what exists, prefer the standard library and platform features, and keep diffs small.
docling-project/docling
Applies opinionated production Python conventions chosen by the project's Python version: modern type syntax, pathlib, explicit checks and interface guidance.
amElnagdy/guard-skills
Reviews generated or changed production code against Clean Code, SOLID, DRY, KISS, YAGNI and LLM-specific failure modes before it ships, in any language.
JanDeDobbeleer/oh-my-posh
Reference mapping between Oh My Posh Go segment source code and MDX documentation.
JanDeDobbeleer/oh-my-posh
Full scaffolding workflow for creating a new Oh My Posh segment.
JanDeDobbeleer/oh-my-posh
Cross-language architecture and clean-code principles for this project: Clean Code, Object Calisthenics, SOLID, guard clauses, hot-path cost, and the code review checklist.
JanDeDobbeleer/oh-my-posh
Workflow for generating conventional commit messages following the Conventional Commits specification.
JanDeDobbeleer/oh-my-posh
Markdown formatting rules for this project. An agent skill from JanDeDobbeleer/oh-my-posh.
JanDeDobbeleer/oh-my-posh
PowerShell cmdlet conventions for this project. An agent skill from JanDeDobbeleer/oh-my-posh.
Categories
Go coding standards and conventions for this project. An agent skill from JanDeDobbeleer/oh-my-posh. Golang is an agent skill from JanDeDobbeleer/oh-my-posh. Go coding standards and conventions for this project.
Golang fits situations like: tasks that involve Code quality; tasks that involve Refactoring.
Run `npx skills add JanDeDobbeleer/oh-my-posh --skill golang -a claude-code`. Or copy the skill folder (.agents/skills/golang in JanDeDobbeleer/oh-my-posh) into .claude/skills/golang in your project. Claude Code loads it when a task matches its description.
Run `npx skills add JanDeDobbeleer/oh-my-posh --skill golang -a codex`. Or copy the skill folder (.agents/skills/golang in JanDeDobbeleer/oh-my-posh) into .agents/skills/golang in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add JanDeDobbeleer/oh-my-posh --skill golang -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/golang, .gemini/skills/golang, .github/skills/golang and .opencode/skills/golang in your project.
Going by SKILL.md and its folder, Golang needs the command-line tools its instructions call (go and git).
SKILL.md names 2 domains. As links in the text: go.dev and google.github.io. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Golang is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.3k tokens (SKILL.md is roughly 17k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Golang: FIXME Resolver (tailcallhq/forgecode, 7.6k stars), Go AST Code Introspection (pilinux/gorest, 506 stars), Systematic Code Refactoring (luongnv89/claude-howto, 42k stars) and Ponytail Lazy Developer Mode (DietrichGebert/ponytail, 159k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
JanDeDobbeleer (a GitHub user) maintains it in JanDeDobbeleer/oh-my-posh, which has 23,566 GitHub stars. The repository holds 11 skills in this directory. The repository was last updated on October 8, 2026.
Source: JanDeDobbeleer/oh-my-posh on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.