Go coding standards and conventions for this project. An agent skill from JanDeDobbeleer/oh-my-posh.

MITAuto-check passedDevelopment

Install Golang

skills CLI
$ npx skills add JanDeDobbeleer/oh-my-posh --skill golang -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install JanDeDobbeleer/oh-my-posh golang --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ 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-src

Use ~/.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/

Facts

Skill name
golang
GitHub stars
24k
Token cost
~4.3k tokens
SKILL.md length
2,025 words
Files
1
Skills in repo
11
Repo updated
First seen
Licence
MIT

At a glance

Go coding standards and conventions for this project. An agent skill from JanDeDobbeleer/oh-my-posh.

  • Works in 2 steps: Could the original bug still occur while… → Could a correct refactor make this test…
  • Tasks that involve Code quality
  • SKILL.md covers General Instructions, Naming Conventions, Code Style and Formatting and Architecture and Project…, plus 4 more sections
  • Calls go and git

What it does

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.

When your agent uses it

  • Tasks that involve Code quality
  • Tasks that involve Refactoring

Example prompts

  • “/golang”

Workflow steps

2 steps, taken from the first numbered list in SKILL.md.

  1. Could the original bug still occur while this test passes?
  2. Could a correct refactor make this test fail?

What it can do on your machine

Read from SKILL.md and the folder at commit ba7d216. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • go
    • git

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • go.dev
    • google.github.io

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

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.

Always · name and description, kept in context so the agent knows when to use it
~32
When it runs · the whole SKILL.md, loaded when a task matches
~4.3k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from JanDeDobbeleer/oh-my-posh at commit ba7d216, republished under its MIT licence (© JanDeDobbeleer). 2,025 words, ~4,257 tokens.

Download SKILL.mdSave it as .claude/skills/golang/SKILL.md (or your agent's skills folder).
name
golang
description
Go coding standards and conventions for this project. Apply when writing, reviewing, or refactoring any Go source file.
triggers
on_commit

Go Development Instructions

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.

General Instructions

  • Write simple, clear, and idiomatic Go code
  • Favor clarity and simplicity over cleverness
  • Follow the principle of least surprise
  • Keep the happy path left-aligned (reduce indentation)
  • Return early to reduce nesting
  • Make the zero value useful
  • Document exported types, functions, methods, and packages
  • Use Go modules for dependency management
  • AVOID else statements - use early returns, continue, or break instead
  • Avoid wrapping primitives without a clear semantic benefit; define new types when they add meaning.
  • Use typed slices/maps and document element semantics when not obvious.
  • Start error strings with a lowercase letter.

Naming Conventions

Packages
  • Use lowercase, single-word package names
  • Avoid _ characters, hyphens, or mixedCaps
  • Choose names that describe what the package provides, not what it contains
  • Avoid generic names like util, common, or base
  • Package names should be singular, not plural
Variables and Functions
  • Use mixedCaps or MixedCaps (camelCase) rather than _ characters
  • Keep names short but descriptive
  • Use single-letter variables for very short scopes (like loop indices)
  • Exported names start with a capital letter
  • Unexported names start with a lowercase letter
  • Avoid stuttering (e.g., avoid http.HTTPServer, prefer http.Server)
Interfaces
  • Name interfaces with -er suffix when possible (e.g., Reader, Writer, Formatter)
  • Single-method interfaces should be named after the method (e.g., Read → Reader)
  • Keep interfaces small and focused
Constants
  • Use MixedCaps for exported constants
  • Use mixedCaps for unexported constants
  • Group related constants using const blocks
  • Consider using typed constants for better type safety

Code Style and Formatting

Formatting
  • Always use gofmt to format code
  • Use goimports to manage imports automatically
  • Keep line to 180 max at all times
  • Add blank lines to separate logical groups of code
Comments
  • Write comments in complete sentences
  • Start sentences with the name of the thing being described
  • Package comments should start with "Package [name]"
  • Use line comments (//) for most comments
  • Use block comments (/* */) sparingly, mainly for package documentation
  • Document why, not what, unless the what is complex
Error Handling
  • Check errors immediately after the function call
  • Don't ignore errors using _ unless you have a good reason (document why)
  • Wrap errors with context using fmt.Errorf with %w verb
  • Create custom error types when you need to check for specific errors
  • Place error returns as the last return value
  • Name error variables err
  • Keep error messages lowercase and don't end with punctuation
Logging
  • Always use the codebase log package for logging
  • Log errors at the point they occur using log.Error(err)
  • Do not format the errors, let the log package handle it
  • For complex function calls, use defer log.Trace(time.Now(), args) where args are the function arguments at the start of the function.
Control Flow
  • NEVER use else statements - they create unnecessary nesting and reduce readability
  • Use early returns to handle error cases and edge conditions first
  • Use continue in loops to skip to the next iteration instead of nesting
  • Use break to exit loops early instead of complex conditional logic
  • Keep the main logic (happy path) left-aligned with minimal indentation

❌ BAD - Don't do this:

go
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:

go
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:

go
for _, item := range items {
    if item.IsValid() {
        if item.ShouldProcess() {
            // complex processing logic
        }
    }
}

✅ GOOD - Early continue:

go
for _, item := range items {
    if !item.IsValid() {
        continue
    }
    if !item.ShouldProcess() {
        continue
    }

    // complex processing logic (happy path)
}

Architecture and Project Structure

Package Organization
  • Follow standard Go project layout conventions
  • Group related functionality into packages
  • Avoid circular dependencies
Dependency Management
  • Use Go modules (go.mod and go.sum)
  • Keep dependencies minimal
  • Regularly update dependencies for security patches
  • Use go mod tidy to clean up unused dependencies
  • Vendor dependencies when necessary

Type Safety and Language Features

Type Definitions
  • Define types to add meaning and type safety
  • Use struct tags for JSON, YAML and TOML on exported fields
  • Prefer explicit type conversions
  • Use type assertions carefully and check the second return value
Pointers vs Values
  • Use pointers for large structs or when you need to modify the receiver
  • Use values for small structs and when immutability is desired
  • Be consistent within a type's method set
  • Consider the zero value when choosing pointer vs value receivers
Interfaces and Composition
  • Accept interfaces, return concrete types
  • Keep interfaces small (1-3 methods is ideal)
  • Use embedding for composition
  • Define interfaces close to where they're used, not where they're implemented
  • Don't export interfaces unless necessary

Concurrency

Goroutines
  • Don't create goroutines in libraries; let the caller control concurrency
  • Always know how a goroutine will exit
  • Use sync.WaitGroup or channels to wait for goroutines
  • Avoid goroutine leaks by ensuring cleanup
Channels
  • Use channels to communicate between goroutines
  • Don't communicate by sharing memory; share memory by communicating
  • Close channels from the sender side, not the receiver
  • Use buffered channels when you know the capacity
  • Use select for non-blocking operations
Synchronization
  • Use sync.Mutex for protecting shared state
  • Keep critical sections small
  • Use sync.RWMutex when you have many readers
  • Prefer channels over mutexes when possible
  • Use sync.Once for one-time initialization

Error Handling Patterns

Creating Errors
  • Use errors.New for simple static errors
  • Use fmt.Errorf for errors with runtime values
  • Create custom error types for domain-specific errors
  • Export error variables for sentinel errors
  • Use errors.Is and errors.As for error checking
Error Propagation
  • Add context when propagating errors up the stack
  • Don't log and return errors (choose one)
  • Handle errors at the appropriate level
  • Consider using structured errors for better debugging

Performance Optimization

Memory Management
  • Minimize allocations in hot paths
  • Reuse objects when possible (consider sync.Pool)
  • Use value receivers for small structs
  • Preallocate slices when size is known
  • Avoid unnecessary string conversions
Profiling
  • Use built-in profiling tools (pprof)
  • Benchmark critical code paths
  • Profile before making performance changes
  • Focus on algorithmic improvements first
  • Consider using testing.B for benchmarks

Testing

Test Organization
  • Keep tests in the same package (white-box testing)
  • Use _test package suffix for black-box testing
  • Name test files with _test.go suffix
  • Place test files next to the code they test
Writing Tests
  • Name tests descriptively using TestFunctionNameScenario
  • Use subtests with t.Run for better organization
  • Test both success and error cases
  • Use testify/assert and testify/require for assertions
  • Include both positive and negative test cases
  • Test edge cases and error conditions
  • When including a standard library that conflicts with an existing import, use the lib(library name) pattern to avoid conflicts. Such as: libtime for the time package.
Test behavior, not the patch

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:

  1. Could the original bug still occur while this test passes?
  2. Could a correct refactor make this test fail?

If either answer is yes, redesign or remove the test.

Show full SKILL.md (819 more words)Show less
Table-driven tests are the default

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.

go
// ✅ 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 data
Test Helpers
  • Mark helper functions with t.Helper()
  • Create test fixtures for complex setup
  • Use testing.TB interface for functions used in tests and benchmarks
  • Clean up resources using t.Cleanup()
Global state: always save the original value and restore it

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.

go
// ✅ 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) }()

Security Best Practices

Input Validation
  • Validate all external input
  • Use strong typing to prevent invalid states
  • Sanitize data before using in SQL queries
  • Be careful with file paths from user input
  • Validate and escape data for different contexts (HTML, SQL, shell)
Cryptography
  • Use standard library crypto packages
  • Never write your own cryptography
  • Use crypto/rand for random number generation
  • Store passwords using bcrypt or similar
  • Use TLS for network communication

Documentation

Code Documentation
  • Document all exported symbols
  • Start documentation with the symbol name
  • Use examples in documentation when helpful
  • Keep documentation close to code
  • Update documentation when code changes
README and Documentation Files
  • Include clear setup instructions
  • Document dependencies and requirements
  • Provide usage examples
  • Document configuration options
  • Include troubleshooting section

Tools and Development Workflow

Essential Tools
  • go fmt: Format code
  • go vet: Find suspicious constructs
  • golint or golangci-lint: Additional linting
  • go test: Run tests
  • go mod: Manage dependencies
  • go generate: Code generation
Development Practices
  • Run tests before committing
  • Use pre-commit hooks for formatting and linting
  • Keep commits focused and atomic
  • Write clear, descriptive commit messages
  • Review diffs before committing
Pre-Commit Quality Gate

REQUIRED 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.

  1. Code Modernization: Apply modern Go best practices; this rewrites files in place

    bash
    modernize --fix "./..."

    modernize modifies source files (e.g. replacing strings.Split with strings.SplitSeq for Go 1.24+ range loops). Always stage its changes and include them in the same commit as your feature code.

  2. Field Alignment: Optimize struct field ordering for memory efficiency; this rewrites files in place

    bash
    fieldalignment --fix "./..."

    Warning: fieldalignment rewrites 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.

  3. Dependency Management: Clean up and organize module dependencies

    bash
    go mod tidy
  4. Formatting and Linting: Ensure code follows standards (must report zero errors)

    bash
    gofmt -w .
    golangci-lint run

After 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.

Platform-specific files (_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:

powershell
$env:GOOS = "linux"; go build ./...; $env:GOOS = ""

On Linux/macOS, run:

bash
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.

Common golangci-lint violations to fix before committing

These rules frequently fire on new code and are quick to resolve before linting:

LinterTriggerFix
goconstSame string literal occurs 3+ timesExtract to a named const
gofmtIncorrect indentation or comment spacingRun gofmt -w .; it fixes automatically
duplTwo functions/test cases with near-identical structureAdd //nolint:dupl with a brief reason comment
modernizestrings.Split used in a for range (Go 1.24+)Run modernize --fix "./..." (auto-fixes)

Common Pitfalls to Avoid

  • Not checking errors
  • Ignoring race conditions
  • Creating goroutine leaks
  • Not using defer for cleanup
  • Modifying maps concurrently
  • Confusing nil interfaces with nil pointers
  • Forgetting to close resources (files, connections)
  • Using global variables unnecessarily
  • Over-using empty interfaces (interface{} or any)
  • Not considering the zero value of types

© JanDeDobbeleer, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .agents/skills/golang of JanDeDobbeleer/oh-my-posh.

Open the folder on GitHubat commit ba7d216

Compare with similar skills

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.

Golang compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Golang this skillJanDeDobbeleer/oh-my-posh24k—~4.3kAutomated safety check: PassMIT
FIXME Resolvertailcallhq/forgecode7.6k—~1.1kAutomated safety check: PassApache-2.0
Go AST Code Introspectionpilinux/gorest506—~414Automated safety check: PassMIT
Systematic Code Refactoringluongnv89/claude-howto42k—~3kAutomated safety check: PassMIT
Ponytail Lazy Developer ModeDietrichGebert/ponytail159k—~873Automated safety check: PassMIT
Dignified Python Standardsdocling-project/docling69k—~1.5kAutomated safety check: PassApache-2.0

Similar skills

  • 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.

    7.6k GitHub stars~1.1k tokensUpdated today
    DevelopmentAuto-check passed
  • Enumerates Go declarations and signatures from the syntax tree, then proposes small, mechanically safe refactors with file and line citations.

    506 GitHub stars~414 tokensUpdated 14 days ago
    DevelopmentAuto-check passed
  • Systematic Code Refactoring

    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.

    42k GitHub stars~3k tokensUpdated 9 days ago
    DevelopmentAuto-check passed
  • Ponytail Lazy Developer Mode

    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.

    159k GitHub stars~873 tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Dignified Python Standards

    docling-project/docling

    Applies opinionated production Python conventions chosen by the project's Python version: modern type syntax, pathlib, explicit checks and interface guidance.

    69k GitHub stars~1.5k tokensUpdated today
    DevelopmentAuto-check passed
  • Clean Code Guard

    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.

    1.3k GitHub starsUsed in 2 repos~4.3k tokens
    DevelopmentAuto-check passed

More from JanDeDobbeleer/oh-my-posh

All 11 skills in this repo
  • Segment Docs

    JanDeDobbeleer/oh-my-posh

    Reference mapping between Oh My Posh Go segment source code and MDX documentation.

    24k GitHub stars~1.1k tokensUpdated yesterday
    Auto-check passed
  • Segment Create

    JanDeDobbeleer/oh-my-posh

    Full scaffolding workflow for creating a new Oh My Posh segment.

    24k GitHub stars~1.2k tokensUpdated yesterday
    Auto-check passed
  • Architecture

    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.

    24k GitHub stars~1.5k tokensUpdated yesterday
    Auto-check passed
  • Conventional Commit

    JanDeDobbeleer/oh-my-posh

    Workflow for generating conventional commit messages following the Conventional Commits specification.

    24k GitHub stars~1.2k tokensUpdated yesterday
    Auto-check: notes
  • Markdown

    JanDeDobbeleer/oh-my-posh

    Markdown formatting rules for this project. An agent skill from JanDeDobbeleer/oh-my-posh.

    24k GitHub stars~754 tokensUpdated yesterday
    Auto-check passed
  • Powershell

    JanDeDobbeleer/oh-my-posh

    PowerShell cmdlet conventions for this project. An agent skill from JanDeDobbeleer/oh-my-posh.

    24k GitHub stars~2.2k tokensUpdated yesterday
    Auto-check passed

Works with

Categories

Questions about Golang

What does Golang do?

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.

When should I use Golang?

Golang fits situations like: tasks that involve Code quality; tasks that involve Refactoring.

How do I install Golang in Claude Code?

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.

How do I install Golang in Codex?

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.

Can I use Golang in Cursor, Gemini CLI or GitHub Copilot?

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.

What does Golang need to run?

Going by SKILL.md and its folder, Golang needs the command-line tools its instructions call (go and git).

Does Golang access the network?

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.

Is Golang safe to install?

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.

What licence does Golang use?

Golang is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Golang use?

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.

What are the alternatives to Golang?

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.

Who maintains Golang?

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.