agentCLAWHUBUnverified

go-dev

Opinionated Go setup with golangci-lint v2, gofumpt, gotestsum, golang-migrate, and just. Use when starting a Go project, configuring lint, format, test, coverage or CI, writing a Justfile, wiring migrations, or leaving a Makefile workflow.

OpenClaw

Rank

62

Safety

84

Downloads

1.7k

Updated

Oct 10, 2026

Version

0.6.0

Source

CLAWHUB

About

What it does, and when to use it.

Capability contract not published. No trust telemetry is available yet. 1.7K downloads reported by the source. Last updated 10/10/2026.

Avoid when

  • Contract metadata is missing or unavailable for deterministic execution.

Risk flags: missing_or_unavailable_contract, trust_data_unavailable, schema_references_missing

Public facts

Every fact links back to the source it came from.

Vendor
Clawhubvendor · observed Oct 10, 2026
Protocol compatibility
OpenClawcompatibility · observed Oct 10, 2026
Adoption signal
1.7K downloadsadoption · observed Oct 10, 2026
Latest release
0.6.0release · observed Oct 6, 2026
Handshake status
UNKNOWNsecurity

Install and run

Setup complexity: low.

clawhub skill install s17bp3v1hm1dnkzey0c9tfh02183j0y5:go-dev
  1. Install using `clawhub skill install s17bp3v1hm1dnkzey0c9tfh02183j0y5:go-dev` in an isolated environment before connecting it to live workloads.
  2. No published capability contract is available yet, so validate auth and request/response behavior manually.
  3. Review the upstream CLAWHUB listing at https://clawhub.ai/tenequm/go-dev before using production credentials.

Contract: missing

curl -s "https://www.xpersona.co/api/v1/agents/clawhub-tenequm-go-dev/snapshot"

Documentation

CLAWHUB

147,957 characters of source documentation, loaded on request.

Extracted files

5 files captured from the source.

SKILL.md

---
name: go-dev
description: Opinionated Go setup with golangci-lint v2, gofumpt, gotestsum, golang-migrate, and just. Use when starting a Go project, configuring lint, format, test, coverage or CI, writing a Justfile, wiring migrations, or leaving a Makefile workflow.
metadata:
  version: "0.6.0"
  categories: "development"
  topics: "go, golangci-lint, gofumpt, testing, just"
  upstream: "[email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected]"
  openclaw:
    homepage: https://github.com/tenequm/skills/tree/main/skills/go-dev
    emoji: "🐹"
    envVars:
      - name: DATABASE_URL
        required: false
        description: Connection string used by the Justfile migration recipes (golang-migrate)
---

# Go Development Stack

Opinionated, modern Go development setup. One tool per concern, zero overlap.

## When to Use

- Starting a new Go project from scratch
- Adding linting, formatting, or testing infrastructure
- Setting up CI/CD for a Go service or library
- Creating a Justfile to replace a Makefile
- Adding database migration tooling
- Migrating from scattered gofmt/govet/staticcheck invocations to a unified setup

Not for a fork that regularly merges from upstream: replacing its Makefile and reformatting the tree with gofumpt conflicts on every merge and buries real changes in a reformat diff. Keep upstream's gofmt and build tooling there, and only add checks.

## The Stack

| Tool | Version | Role | Replaces |
|------|---------|------|----------|
| **Go** | 1.27+ | Language, toolchain, `go mod`, `go fix` | - |
| **golangci-lint** | v2.14+ | Meta-linter (100+ linters + formatters + `fmt` command) | gofmt, govet, staticcheck, errcheck run separately |
| **gofumpt** | v0.12+ | Strict formatter (superset of gofmt, 19 default rules) | gofmt |
| **gotestsum** | v1.13+ | Test runner with readable output, watch mode, JUnit XML | Raw `go test` |
| **just** | 1.58+ | Task runner | Makefile |
| **golang-migrate** | v4.20+ | DB migrations (CLI + library + `embed.FS`) | Manual SQL scripts |
| **lefthook** | v2.1+ | Git hooks (single binary, parallel) | pre-commit (Python) |

**Version floors are load-bearing.** golangci-lint "supports Go versions lower or equal to the Go version used to compile it" - a pin older than your Go toolchain fails outright. Go 1.27 support landed in golangci-lint v2.13.0, so `v2.13` is the floor for a Go 1.27 project; this skill pins v2.14.0, the first release that bundles gofumpt v0.12.0. Two more floors moved recently: gofumpt v0.12.0 "is based on Go 1.27's gofmt, and requires Go 1.26 or later", and lefthook's `go install` path now asks for Go 1.26+.

## Quick Start: New Project

```bash
# 1. Create module
mkdir myapp && cd myapp
go mod init github.com/yourorg/myapp

# 2. Scaffold directories
mkdir -p cmd/myapp internal migrations

# 3. Install golangci-lint as a binary, not as a module tool (see note below)
curl -sSfL https://golangci-lint.run/install.

_meta.json

{
  "ownerId": "kn76gpsgjw5chv0xvzbzcb8cxn81x46r",
  "slug": "go-dev",
  "version": "0.6.0",
  "publishedAt": 1791288465096
}

references/go-migrate-reference.md

# golang-migrate Reference

Latest: **v4.20.1** (2026-09-09). Built with Go 1.25/1.26. MIT license, 18K+ stars.

**Pin v4.20.1, not v4.20.0.** A release-workflow bug meant v4.20.0 exists as a git tag but never reached Docker or the package registries - "Due to a bug in the release workflow, GoReleaser failed and `v4.20.0` was not published to Docker or other package registries." v4.20.1 is that release redistributed, and carries no other changes.

v4.20.0 is worth upgrading for regardless of the pin mechanics:

- **S3 sources silently truncated at 1000 migrations** - "fix(source/aws_s3): paginate ListObjects to load >1000 migrations".
- **Quadratic startup cost removed** - "perf(source): build migrations index lazily to avoid quadratic startup".
- **Security, partial:** migrate's own code moved from `docker/docker` to the `moby/moby/api` and `moby/moby/client` modules, but v4.20.1's `go.mod` still lists `github.com/docker/docker v28.5.2+incompatible // indirect`, pulled in by `dhui/dktest`. Scanners keep flagging it - open issue [golang-migrate/migrate#1444](https://github.com/golang-migrate/migrate/issues/1444) "Dependencies still trigger CVE-2026-41568" (milestone v4.21.0).

## Installation

### CLI

```bash
# Homebrew (macOS)
brew install golang-migrate

# Scoop (Windows)
scoop install migrate

# Pre-built binary
curl -L https://github.com/golang-migrate/migrate/releases/download/v4.20.1/migrate.linux-amd64.tar.gz | tar xvz

# With Go (specify database driver via build tags)
go install -tags 'postgres' github.com/golang-migrate/migrate/v4/cmd/[email protected]

# Docker
docker run -v $(pwd)/migrations:/migrations --network host migrate/migrate \
    -path=/migrations/ -database "postgres://localhost:5432/db" up
```

Multiple drivers: `-tags 'postgres mysql sqlite3'`

### Library

```bash
go get github.com/golang-migrate/migrate/v4
```

## Migration File Naming

Format: `{version}_{title}.{direction}.sql`

### Sequential (recommended for smaller teams)

```bash
migrate create -ext sql -dir migrations -seq create_users_table
```

Produces:
```
migrations/
  000001_create_users_table.up.sql
  000001_create_users_table.down.sql
```

Control zero-padding with `-digits N` (default: 6).

Two more `create` flags: `-format` takes "a Go time format string" for the version prefix, and `-tz` sets the timezone used to generate it.

### Timestamp (better for larger teams)

```bash
migrate create -ext sql -dir migrations create_users_table
```

Produces (default `-format` is `20060102150405`, a UTC timestamp):
```
migrations/
  20240405123456_create_users_table.up.sql
  20240405123456_create_users_table.down.sql
```

Eliminates version conflicts when multiple developers create migrations simultaneously.

For unix-epoch versions pass `-format unix` - "If the string `"unix"` or `"unixNano"` is specified, then the seconds or nanoseconds since January 1, 1970 UTC respectively will be used." Combining `-seq` with any non-default `-format` fails with "the seq and fo

references/go-testing-reference.md

# Go Testing Reference

Covers Go testing best practices, patterns, and tooling as of Go 1.27 (August 2026).

## Table-Driven Tests

The idiomatic Go testing pattern. Use named struct slices with `t.Run()` for subtests:

```go
func TestUserValidation(t *testing.T) {
    tests := []struct {
        name    string
        user    User
        wantErr error
    }{
        {
            name:    "valid user",
            user:    User{Email: "[email protected]", Age: 25},
            wantErr: nil,
        },
        {
            name:    "missing email",
            user:    User{Age: 25},
            wantErr: ErrInvalidEmail,
        },
        {
            name:    "negative age",
            user:    User{Email: "[email protected]", Age: -1},
            wantErr: ErrInvalidAge,
        },
    }
    for _, tt := range tests {
        t.Run(tt.name, func(t *testing.T) {
            err := tt.user.Validate()
            if !errors.Is(err, tt.wantErr) {
                t.Errorf("Validate() error = %v, wantErr %v", err, tt.wantErr)
            }
        })
    }
}
```

**Note:** Since Go 1.22, the loop variable capture bug is fixed. `tt := tt` inside the loop is no longer needed, even with `t.Parallel()`.

## Parallel Tests

```go
func TestParallel(t *testing.T) {
    tests := []struct {
        name  string
        input int
        want  int
    }{
        {"double 1", 1, 2},
        {"double 5", 5, 10},
    }
    for _, tt := range tests {
        t.Run(tt.name, func(t *testing.T) {
            t.Parallel() // Safe without tt := tt in Go 1.22+
            got := Double(tt.input)
            if got != tt.want {
                t.Errorf("got %d, want %d", got, tt.want)
            }
        })
    }
}
```

Default parallelism = `GOMAXPROCS`. Override with `go test -parallel N`.

## Testing Helpers (Go 1.14-1.27)

### t.Helper()

Mark functions as test helpers so failures report the caller's line:

```go
func assertNoError(t testing.TB, err error) {
    t.Helper()
    if err != nil {
        t.Fatalf("unexpected error: %v", err)
    }
}
```

Use `testing.TB` as the parameter type so helpers work in both tests and benchmarks.

### t.Cleanup(func()) - Go 1.14

Register cleanup that runs after the test and all subtests complete. LIFO order:

```go
func newTestDB(t *testing.T) *DB {
    t.Helper()
    db := openDB()
    t.Cleanup(func() { db.Close() })
    return db
}
```

### t.TempDir() - Go 1.15

Auto-cleaned temporary directory:

```go
func TestWriteFile(t *testing.T) {
    dir := t.TempDir() // Removed automatically after test
    path := filepath.Join(dir, "output.txt")
    err := os.WriteFile(path, []byte("hello"), 0o644)
    require.NoError(t, err)
}
```

### t.Setenv(key, value) - Go 1.17

Set env var for test duration, restored on cleanup:

```go
func TestConfig(t *testing.T) {
    t.Setenv("DATABASE_URL", "postgres://test@localhost/testdb")
    cfg := LoadConfig()
    assert.Equal(t, "postgres://test@localhost/testdb", cfg.DatabaseURL)
}
```

references/gofumpt-reference.md

# gofumpt Reference

Latest: **v0.12.0** (2026-09-07). Based on Go 1.27's gofmt - "This release is based on Go 1.27's gofmt, and requires Go 1.26 or later."

gofumpt is a **strict superset of gofmt** - any code formatted by gofumpt produces zero changes when processed by gofmt. It adds 19 opinionated formatting rules on top, plus 3 opt-in extra rules.

**Upgrading to v0.12.0 reformats imports.** Four fixes change output on real code, so expect a one-time diff: a std import carrying a comment is "no longer moved into the top import group, as the comment stayed behind and ended up detached at the bottom of the group"; moving a std import up "no longer leaves an empty line where it used to be"; a copyright header or package doc "no longer makes gofumpt treat a single-line first declaration as multi-line"; and an assignment whose right-hand side is split by a comment "is now left alone". Go 1.27's gofmt adds a fifth source of churn: a column-alignment fix means "running gofmt from Go 1.27 on previously formatted code may produce minor whitespace changes", and v0.12.0 inherits it from `go/printer`. Land the reformat as its own commit.

**golangci-lint lags gofumpt.** golangci-lint v2.14.0 bundles `mvdan.cc/gofumpt v0.12.0`, so today `golangci-lint fmt` and a standalone v0.12.0 binary agree (v2.13.2 still vendored v0.11.0 and disagreed on exactly the cases above). The lag recurs whenever gofumpt releases first: master already carries 33 unreleased commits (2026-09-22/23), 16 of them output-changing `format:` fixes such as "format: don't join imports whose comments would be left behind". Do not use one as fixer and the other as gate.

## Installation

```bash
# From source (recommended)
go install mvdan.cc/[email protected]

# Pre-built binaries from GitHub Releases
# Available for darwin/linux/windows on amd64/arm64

# Via gopls (no separate binary needed for editor use)
# Configure your editor to tell gopls to use gofumpt formatting
```

## CLI Usage

```bash
gofumpt -w .                  # Format all Go files recursively, in-place
gofumpt -l .                  # List files that differ from gofumpt style
gofumpt -d main.go            # Show diff without modifying (non-zero exit if diff exists)
gofumpt -w main.go            # Format single file in-place
gofumpt -extra=group_params,clothe_returns .  # Explicit extra rules (the "=" is required)
gofumpt -extra .              # All three extra rules, balance_calls included
gofumpt -lang=go1.27 .        # Specify language version
gofumpt -modpath=github.com/org/repo .  # Specify module path
gofumpt -version              # Print version
cat main.go | gofumpt         # Format from stdin
```

**Flags:**
- `-w` - write result to file (instead of stdout)
- `-l` - list files that differ
- `-d` - display diff (non-zero exit if any diff, since v0.8.0)
- `-extra` - enable extra rules. **Changed in v0.10.0:** "The `-extra` flag now accepts a comma-separated list of rule names to enable individual extra rules, rather th
Github ReposUpdated 12h agoRank 70

AionUi

Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!

MCPOPENCLAW
Github ReposUpdated 6mo agoRank 70

activepieces

AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents

OPENCLAW
Github ReposUpdated 6mo agoRank 70

cherry-studio

AI productivity studio with smart chat, autonomous agents, and 300+ assistants.

MCPOPENCLAW
Github ReposUpdated 7mo agoRank 70

CopilotKit

The Frontend for Agents & Generative UI. React + Angular

OPENCLAW

Machine-readable data

The same record, as JSON, for agents and crawlers.

{
  "facts": [
    {
      "factKey": "vendor",
      "category": "vendor",
      "label": "Vendor",
      "value": "Clawhub",
      "href": "https://clawhub.ai/tenequm/skills/go-dev",
      "sourceUrl": "https://clawhub.ai/tenequm/skills/go-dev",
      "sourceType": "profile",
      "confidence": "medium",
      "observedAt": "2026-10-10T03:58:51.269Z",
      "isPublic": true
    },
    {
      "factKey": "protocols",
      "category": "compatibility",
      "label": "Protocol compatibility",
      "value": "OpenClaw",
      "href": "https://www.xpersona.co/api/v1/agents/clawhub-tenequm-go-dev/contract",
      "sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-tenequm-go-dev/contract",
      "sourceType": "contract",
      "confidence": "medium",
      "observedAt": "2026-10-10T03:58:51.269Z",
      "isPublic": true
    },
    {
      "factKey": "traction",
      "category": "adoption",
      "label": "Adoption signal",
      "value": "1.7K downloads",
      "href": "https://clawhub.ai/tenequm/go-dev",
      "sourceUrl": "https://clawhub.ai/tenequm/go-dev",
      "sourceType": "profile",
      "confidence": "medium",
      "observedAt": "2026-10-10T03:58:51.269Z",
      "isPublic": true
    },
    {
      "factKey": "latest_release",
      "category": "release",
      "label": "Latest release",
      "value": "0.6.0",
      "href": "https://clawhub.ai/tenequm/go-dev",
      "sourceUrl": "https://clawhub.ai/tenequm/go-dev",
      "sourceType": "release",
      "confidence": "medium",
      "observedAt": "2026-10-06T12:07:45.096Z",
      "isPublic": true
    },
    {
      "factKey": "handshake_status",
      "category": "security",
      "label": "Handshake status",
      "value": "UNKNOWN",
      "href": "https://www.xpersona.co/api/v1/agents/clawhub-tenequm-go-dev/trust",
      "sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-tenequm-go-dev/trust",
      "sourceType": "trust",
      "confidence": "medium",
      "observedAt": null,
      "isPublic": true
    }
  ],
  "events": [
    {
      "eventType": "release",
      "title": "Release 0.6.0",
      "description": "Updated go-dev from 0.5.0 to 0.6.0. Changes: - modified `CHANGELOG.md` - modified `SKILL.md` - modified `references/go-testing-reference.md` - modified `references/gofumpt-reference.md` - modified `references/golangci-lint-reference.md` - modified `references/gotestsum-reference.md` - modified `references/justfile-reference.md` - modified `references/lefthook-reference.md`",
      "href": "https://clawhub.ai/tenequm/go-dev",
      "sourceUrl": "https://clawhub.ai/tenequm/go-dev",
      "sourceType": "release",
      "confidence": "medium",
      "observedAt": "2026-10-06T12:07:45.096Z",
      "isPublic": true
    }
  ]
}

Record generated Oct 10, 2026.

Sponsored

Ads related to go-dev and adjacent AI workflows.