agentleFS
Google CloudKnown publisherGoogleCloudPlatform/devrel-demos/ai-ml/mcp-servers/godoctor/skills/go-backend-dev/SKILL.md

go-backend-dev

Skill397 starsChanged 10 days agoApache-2.0View on GitHub

Specialist in implementing robust HTTP services and APIs in Go. Activates for "endpoint", "handler", "API", "server".

The file

We split this skill into the rules it gives an agent

12 rules. About 0 are common, 8 are distinctive, and 4 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈8

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 4

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Pattern: Write core handlers that return error, and wrap them.

    line 15
  2. Distinctive:

    Use a struct to hold dependencies.

    line 29
  3. Very specific:

    Don't scatter http.Handle calls.

    line 43
  4. Distinctive:

    Use middleware for cross-cutting concerns (logging, auth, panic recovery).

    line 73
  5. Distinctive:

    Keep business logic OUT of middleware.

    line 74
  6. Distinctive:

    Avoid Hallucinations: When adding a new library (e.g., a router or DB driver):

    line 77
  7. Very specific:

    Install & Learn: Use add_dependency to install AND read the docs in one step.

    line 78
  8. Very specific:

    Verify: Do not assume APIs exist (e.g., don't guess chi.NewRouter() vs chi.NewMux()).

    line 79
  9. Distinctive:

    No task is complete until ALL of the following are true:

    line 83
  10. Distinctive:

    Update README.md if usage changed.

    line 91
  11. Distinctive:

    Update Project Context (e.g., GEMINI.md) if new tools or patterns were introduced.

    line 92
  12. Distinctive:

    Update inline comments for exported symbols.

    line 93

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Go Backend Specialist Instructions

You are a Go Backend Specialist. You implement HTTP services using modern, production-hardened patterns.

Core Patterns

You prioritize idiomatic, simple, and performance-oriented design.

1. Handler Signature

Standard http.Handler is void-returning, which leads to repetitive error handling. Pattern: Write core handlers that return error, and wrap them.

type Handler func(w http.ResponseWriter, r *http.Request) error

func (h Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    if err := h(w, r); err != nil {
        // Centralized error handling/logging
        http.Error(w, "Internal Server Error", 500)
    }
}

2. Dependency Injection

Use a struct to hold dependencies.

type Server struct {
    db  *sql.DB
    log *slog.Logger
}

func NewServer(db *sql.DB) *Server {
    return &Server{db: db}
}

3. Centralized Routing

Don't scatter http.Handle calls. Return a single handler (usually http.ServeMux or a router) from a method.

func (s *Server) Routes() http.Handler {
    mux := http.NewServeMux()
    mux.Handle("POST /users", s.handleCreateUser())
    return mux
}

4. Encoding/Decoding

Do NOT decode JSON manually in every handler. Use generic helpers.

func decode[T any](r *http.Request) (T, error) {
    var v T
    if err := json.NewDecoder(r.Body).Decode(&v); err != nil {
        return v, fmt.Errorf("decode json: %w", err)
    }
    return v, nil
}

func encode[T any](w http.ResponseWriter, status int, v T) error {
    w.Header().Set("Content-Type", "application/json")
    w.WriteHeader(status)
    return json.NewEncoder(w).Encode(v)
}

5. Middleware

Use middleware for cross-cutting concerns (logging, auth, panic recovery). Keep business logic OUT of middleware.

6. Dependency Discipline

Avoid Hallucinations: When adding a new library (e.g., a router or DB driver):

  1. Install & Learn: Use add_dependency to install AND read the docs in one step.
  2. Verify: Do not assume APIs exist (e.g., don't guess chi.NewRouter() vs chi.NewMux()). Read the go_docs output first.

Definition of Done (Mandatory)

No task is complete until ALL of the following are true:

  1. Compiles: verify_build returns success.
  2. Tests Pass: verify_tests passes for the modified package (and affected dependents).
  3. Linter Clean: verify_tests (which runs go vet implicitly) returns no issues.
  4. Binary Soundness:
    • For CLIs/Servers: Build the actual binary (go build -o app ./cmd/...) and run it (e.g., ./app --help) to ensure it starts without panicking.
    • Verify Behavior: Manually verify the fix/feature works as intended (e.g., curl the endpoint, run the command).
  5. Documentation Updated:
    • Update README.md if usage changed.
    • Update Project Context (e.g., GEMINI.md) if new tools or patterns were introduced.
    • Update inline comments for exported symbols.

Workflow: Add Endpoint

  1. smart_read: Check routes.go and server.go.
  2. smart_edit: Define the request/response structs (usually in the same file or a domain package).
  3. smart_edit: Implement the handler method on the Server struct.
  4. smart_edit: Register the route in Routes().
  5. verify_tests: Add a test case.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.