go-proverbs
Question a Go plan, spec, or design with the Go proverbs from Rob Pike's Gopherfest 2015 talk.
Skill by s0up4200
Chalk Labs
Need help deploying go-proverbs?
Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/s0up4200-go-proverbs
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: design, backend
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/go-proverbs
What's inside
- Skill name
go-proverbs- Description
- Question a Go plan, spec, or design with the Go proverbs from Rob Pike's Gopherfest 2015 talk. Use when the user invokes /go-proverbs on a plan or spec, asks to "question this plan" or "check this against Go proverbs" during planning. Also use in plan mode when a Go plan involves concurrency, interfaces, dependencies, errors, cgo, reflection, or package API design. Do not use for line-level code review — this skill interrogates plans before code exists.
- License
- MIT
- Instructions
- 166 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
# Go Proverbs: Question the Plan
Interrogate a plan or spec with the 19 Go proverbs before any code exists. The proverbs are cheap to apply at planning time and expensive to apply after implementation. A plan that survives them produces less code and fewer rewrites.
The proverbs come from Rob Pike's talk at Gopherfest SV 2015 ([video](https://www.youtube.com/watch?v=PAAkCSZUG1c), [list](https://go-proverbs.github.io/)). "Don't panic" comes from the [Go wiki](https://go.dev/wiki/CodeReviewComments#dont-panic). Each proverb below carries a timestamp into the talk.
## How to Run the Interrogation
1. Read the plan, spec, or design the user provides. If the user gives no context, ask for the plan.
2. Walk the catalog below. For each proverb, decide: does this plan create tension with it?
3. Keep only the proverbs that bite. Most plans trigger 3 to 6 proverbs. A report that cites all 19 buries the real risks.
4. For each proverb that bites, output the proverb, the specific part of the plan it challenges, and 1 to 3 pointed questions. Ask questions — do not lecture and do not rewrite the plan.
5. Close with the one or two questions that matter most. These are the questions that change the plan if the answer is wrong.
Pike said the proverbs can contradict each other, and that this is fine — sometimes one engineering decision is right, sometimes its exact opposite ([21:12](https://www.youtube.com/watch?v=PAAkCSZUG1c&t=21m12s)). Treat them as lenses, not laws. When the user has a good answer to a question, the proverb is satisfied. Do not re-argue a decision the user has already defended.
## Output Format
```
## Proverbs that bite
### "<proverb>"
<what part of the plan this challenges, 1-2 sentences>
- <question>
- <question>
## The questions that matter most
1. <question>
2. <question>
```
## The Catalog
Meanings paraphrased from the talk transcript (Rob Pike, Gopherfest SV 2015, retrieved 2026-08-20).
### 1. Don't communicate by sharing memory, share memory by communicating ([2:48](https://www.youtube.com/watch?v=PAAkCSZUG1c&t=2m48s))
Pass the address of a data structure on a channel. When the sender does not keep the pointer, only the receiver has access, so safe concurrency is inherent in the model. The proverb is about ownership transfer, not about channels being mandatory.
- After each hand-off in this plan, who owns the data? Can two goroutines still reach the same pointer?
- Where the plan uses a shared structure plus a lock, would ownership transfer remove the lock?
### 2. Concurrency is not parallelism ([3:42](https://www.youtube.com/watch?v=PAAkCSZUG1c&t=3m42s))
Concurrency is a way to structure a program so it is easy to understand and scalable. Parallelism is only the simultaneous execution of goroutines. Beginners confuse the two.
- Is the concurrency in this plan a structure, or a speed hack? Does the structure still make sense on one core?
- If the goal is speed, is there a measurement that shows the serial version is too slow?
### 3. Channels orchestrate; mutexes serialize ([4:20](https://www.youtube.com/watch?v=PAAkCSZUG1c&t=4m20s))
A mutex is fine-grained: it makes one thing happen at a time to one variable. Channels and goroutines arrange how the pieces of the whole program work together, as in the canonical select-for loop.
- Does the plan use a channel where it only guards one variable? A mutex is smaller.
- Does the plan use a mutex to coordinate program flow? That is orchestration — channels fit better.
### 4. The bigger the interface, the weaker the abstraction ([5:17](https://www.youtube.com/watch?v=PAAkCSZUG1c&t=5m17s))
The three most important interfaces in the Go ecosystem (`io.Reader`, `io.Writer`, `interface{}`) average two-thirds of a method. Small interfaces get many implementations and become a powerful structuring plan. The culture of small interfaces matters more than implicit satisfaction.
- How many methods does each planned interface have? Which callers need all of them?
- How many implementations do you expect? An interface with one planned implementation is a speculative abstraction.
- Can the interface split into two smaller ones that compose?
### 5. Make the zero value useful ([6:25](https://www.youtube.com/watch?v=PAAkCSZUG1c&t=6m25s))
`bytes.Buffer` and `sync.Mutex` work without a constructor. Zero values compose: a struct whose fields all have useful zero values is itself useful when declared. Constructors are fine, but every avoided constructor is less API.
- For each planned type: what happens when a caller writes `var x T` and uses it?
- Does the plan require constructors or `Init` calls that a useful zero value would remove?
### 6. interface{} says nothing ([7:36](https://www.youtube.com/watch?v=PAAkCSZUG1c&t=7m36s))
The empty interface carries no information and forces no guarantees on the caller, so nothing is statically checked. Pike calls `map[string]interface{}` "names to meaningless objects". Sometimes it is necessary; it is overused.
- Where does the plan use `any`? What is the one method that captures the real requirement?
- Would a generic type parameter or a small interface give the same flexibility with static checks?
### 7. Gofmt's style is no one's favorite, yet gofmt is everyone's favorite ([8:43](https://www.youtube.com/watch?v=PAAkCSZUG1c&t=8m43s))
The value is in consistency, not in the specific choices. Experienced Go programmers name gofmt as their favorite feature even though nobody likes its output.
- Does the plan invent a convention, format, or style where a standard tool or an established convention exists?
- Is any part of the plan a preference argument in disguise?
### 8. A little copying is better than a little dependency ([9:28](https://www.youtube.com/watch?v=PAAkCSZUG1c&t=9m28s))
A small dependency tree makes programs compile faster and easier to maintain. `strconv` copies its own ~10-line `isPrint` instead of importing 150 KB of Unicode tables — and a test keeps the copy in agreement, so the test has the dependency but the package does not.
- For each planned dependency: how many lines of it does the plan actually use? Would copying those lines cost less than the dependency?
- If a copy drifts from its source, what catches it? (The strconv pattern: a test that compares.)
### 9. Syscall must always be guarded with build tags ([11:10](https://www.youtube.com/watch?v=PAAkCSZUG1c&t=11m10s))
`syscall` is system-specific by design — that is the point. If the plan needs portable behavior, it is using the wrong package; use `os` or another portable layer.
- Which OS and architecture does each syscall-touching piece of the plan assume? Where are the build tags?
- Should this use `os` or `golang.org/x/sys` instead?
### 10. Cgo must always be guarded with build tags ([11:53](https://www.youtube.com/watch?v=PAAkCSZUG1c&t=11m53s))
Same reason: C is not portable. A build failure on an unsupported platform is better than a binary that builds and then breaks at runtime.
- On which platforms must this build? What happens on the ones the C code does not support?
### 11. Cgo is not Go ([12:37](https://www.youtube.com/watch?v=PAAkCSZUG1c&t=12m37s))
With cgo you give up memory safety, correctness guarantees, stability, and garbage collection. Pike: about ninety percent of "my runtime corrupted" reports inside Google turned out to be cgo or SWIG problems. Sometimes a C library deserves use rather than a rewrite — but it is a trap to reach for it early.
- Is there a pure-Go path, even a slower one? What exactly does the C library buy?
- Who debugs the crashes that Go tooling can no longer explain?
### 12. With the unsafe package there are no guarantees ([13:49](https://www.youtube.com/watch?v=PAAkCSZUG1c&t=13m49s))
Code that uses `unsafe` can break on any release, and the Go team would like to break more of it than they do.
- Is there a measurement that justifies `unsafe` in this plan? What is the fallback when a release breaks it?
### 13. Clear is better than clever ([14:35](https://www.youtube.com/watch?v=PAAkCSZUG1c&t=14m35s))From s0up4200/skills, MIT.
More from s0up4200/skills
- 0.570score
branch-cleanup
s0up4200
Find dead local git branches and worktrees in the current repo, write a plan with a SHA backup, and hand the user a cleanup script to run.
SkillAFreshness: AClaude Code +9 - 0.570score
focus
s0up4200
Give an overview of large chained work on GitHub (tracking issues with sub-issues and blocked-by dependencies) and recommend where the user should put their…
SkillAFreshness: AClaude Code +9 - 0.567score
findability
s0up4200
Retro over the last N coding-agent sessions in a repo (Claude Code and Codex).
SkillAFreshness: AClaude Code +9 - 0.565score
github-resolution-audit
s0up4200
Use when auditing GitHub Issues or Discussions for open feature requests that may have shipped, bugs that may already be fixed, stale reports, or duplicates…
SkillAFreshness: AClaude Code +9 - 0.565score
labels
s0up4200
Label a GitHub pull request or issue with the repo's existing labels.
SkillAFreshness: AClaude Code +9 - 0.565score
file-issue
s0up4200
Draft and file a GitHub issue in an upstream repository soup does not maintain.
SkillAFreshness: AClaude Code +9 - 0.561score
codeowners
s0up4200
Create or update the CODEOWNERS file of a GitHub repository from the commit history and the maintainer's decisions.
SkillAFreshness: AClaude Code +9 - 0.561score
challenge-request
s0up4200
Challenge a feature request from Discord or GitHub, and give a verdict of yes, not now, already possible, no, or need more info.
SkillAFreshness: AClaude Code +9 - 0.544score
diagnosing-bugs
s0up4200
Diagnosis loop for hard bugs and performance regressions.
SkillAFreshness: AClaude Code +9 - 0.544score
code-review
s0up4200
Review the changes since a fixed point (commit, branch, tag, or merge-base) along two axes: Standards (does the code follow this repo's documented coding…
SkillAFreshness: AClaude Code +9 - 0.539score
codebase-design
s0up4200
Shared vocabulary for designing deep modules.
SkillAFreshness: AClaude Code +9 - 0.539score
domain-modeling
s0up4200
Build and sharpen a project's domain model.
SkillAFreshness: AClaude Code +9
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Aug 20, 2026 (2 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/s0up4200/skills
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from s0up4200
- 0.570score
focus
s0up4200
Give an overview of large chained work on GitHub (tracking issues with sub-issues and blocked-by dependencies) and recommend where the user should put their…
SkillAFreshness: AClaude Code +9 - 0.570score
branch-cleanup
s0up4200
Find dead local git branches and worktrees in the current repo, write a plan with a SHA backup, and hand the user a cleanup script to run.
SkillAFreshness: AClaude Code +9 - 0.567score
findability
s0up4200
Retro over the last N coding-agent sessions in a repo (Claude Code and Codex).
SkillAFreshness: AClaude Code +9 - 0.565score
labels
s0up4200
Label a GitHub pull request or issue with the repo's existing labels.
SkillAFreshness: AClaude Code +9 - 0.565score
github-resolution-audit
s0up4200
Use when auditing GitHub Issues or Discussions for open feature requests that may have shipped, bugs that may already be fixed, stale reports, or duplicates…
SkillAFreshness: AClaude Code +9 - 0.565score
file-issue
s0up4200
Draft and file a GitHub issue in an upstream repository soup does not maintain.
SkillAFreshness: AClaude Code +9
Done for you
Rather not set it up yourself?
Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.
See how we build AI agents →Read the case studies
Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.
- launches shipped
- 50+
- launches shipped
- media placements
- 500+
- media placements
- founders on every account
- 2
- founders on every account
Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block
Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.
Get go-proverbs running in your business
Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.
Cite this page
go-proverbs skill. Agent Mart. https://agentmart.dev/skills/s0up4200-go-proverbs (last updated 2026-10-24)