Gograph Go Repository Intelligence
ozgurcd/gograph
Gives an agent working in a Go codebase a structural view through a local MCP server: call graphs, blast-radius and impact analysis, and bounded first-call exploration.
Adds a new row to remindb's token-savings benchmark table by writing a scenario function that measures the naive shell-tool token cost against the remindb tool-call cost for the same task.
$ npx skills add radimsem/remindb --skill add-bench-scenario -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install radimsem/remindb add-bench-scenario --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/radimsem/remindb.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/add-bench-scenario .claude/skills/add-bench-scenario && 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 "add-bench-scenario" agent skill from https://github.com/radimsem/remindb/tree/dev/.claude/skills/add-bench-scenario into .claude/skills/add-bench-scenario/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-bench-scenario", 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/radimsem/remindb/tree/dev/.claude/skills/add-bench-scenarioType 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 radimsem/remindb --skill add-bench-scenario -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install radimsem/remindb add-bench-scenario --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/radimsem/remindb.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/add-bench-scenario .agents/skills/add-bench-scenario && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "add-bench-scenario" agent skill from https://github.com/radimsem/remindb/tree/dev/.claude/skills/add-bench-scenario into .agents/skills/add-bench-scenario/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-bench-scenario", 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 radimsem/remindb --skill add-bench-scenario -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install radimsem/remindb add-bench-scenario --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/radimsem/remindb.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/add-bench-scenario .cursor/skills/add-bench-scenario && 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 "add-bench-scenario" agent skill from https://github.com/radimsem/remindb/tree/dev/.claude/skills/add-bench-scenario into .cursor/skills/add-bench-scenario/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-bench-scenario", 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/radimsem/remindb.git --path .claude/skills/add-bench-scenario--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 radimsem/remindb --skill add-bench-scenario -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install radimsem/remindb add-bench-scenario --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/radimsem/remindb.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/add-bench-scenario .gemini/skills/add-bench-scenario && 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 "add-bench-scenario" agent skill from https://github.com/radimsem/remindb/tree/dev/.claude/skills/add-bench-scenario into .gemini/skills/add-bench-scenario/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-bench-scenario", 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 radimsem/remindb add-bench-scenarioInstalls 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 radimsem/remindb --skill add-bench-scenario -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/radimsem/remindb.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/add-bench-scenario .github/skills/add-bench-scenario && 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 "add-bench-scenario" agent skill from https://github.com/radimsem/remindb/tree/dev/.claude/skills/add-bench-scenario into .github/skills/add-bench-scenario/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-bench-scenario", 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 radimsem/remindb --skill add-bench-scenario -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install radimsem/remindb add-bench-scenario --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/radimsem/remindb.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/add-bench-scenario .opencode/skills/add-bench-scenario && 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 "add-bench-scenario" agent skill from https://github.com/radimsem/remindb/tree/dev/.claude/skills/add-bench-scenario into .opencode/skills/add-bench-scenario/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-bench-scenario", 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.
add-bench-scenarioAdds a new row to remindb's token-savings benchmark table by writing a scenario function that measures the naive shell-tool token cost against the remindb tool-call cost for the same task.
The internal/bench package is remindb's external-facing benchmark, comparing how many tokens an agent would spend doing a task with remindb's tools against doing the same task with grep, cat or find, rendered as a token-savings table through text/tabwriter and invoked from the remindb bench CLI subcommand. This is explicitly not the Go testing.B benchmark surface, which lives separately as Benchmark functions in bench_test.go files with its own rules.
A typical scenario touches two files, or three if it needs a new CLI flag: a new benXxx function added to internal/bench/scenarios.go, wiring that function into Run inside bench.go, and optionally a new flag surfaced on the bench subcommand. Every scenario function returns a scenarioResult with a name, a naive token count and a remindb token count, measured with the shared tokens.Estimate helper on both sides so the comparison uses one tokenizer; a scenario that runs over several inputs instead returns a slice of results, one per input. The naive baseline must reflect what an agent would actually do without remindb, such as find plus cat rather than wc -c.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 977b31c. 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.
No scripts in the folder and no shell commands in SKILL.md (its code samples are go).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From 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.
Add a remindb Bench Scenario loads about 1.7k tokens when it runs. Until then it costs about 103 tokens; SKILL.md has 713 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 radimsem/remindb at commit 977b31c, republished under its MIT licence (© radimsem). 713 words, ~1,722 tokens.
.claude/skills/add-bench-scenario/SKILL.md (or your agent's skills folder).internal/bench/ is remindb's external-facing benchmark — it compares "how many tokens does an agent consume to do X via remindb tools" against "how many would they consume doing X with grep / cat / find". The output is a token-savings table rendered via text/tabwriter. It's invoked from the remindb bench CLI subcommand and exercised end-to-end by scripts/bench-agents.sh.
This is not the Go testing.B benchmark surface — those live as Benchmark* functions inside pkg/*/bench_test.go and have their own discipline.
Two files for a typical scenario, three if it needs CLI flag plumbing.
| File | What changes |
|---|---|
internal/bench/scenarios.go | New benchXxx(ctx, session, srcDir, ...) (scenarioResult, error) function |
internal/bench/bench.go | Wire the new scenario into Run, append to results |
cmd/remindb/... (only if new flag needed) | Surface a new flag on the bench subcommand and pass it into bench.Config |
Every scenario implements the same contract: produce one (or more) scenarioResult{name, naiveTok, remindbTok} by measuring two paths to the same answer — the naive path (token count of what an agent would have to read using shell tools) and the remindb path (token count of the tool's response).
Mirror benchTree, benchSearch, or benchFetch in scenarios.go:
func benchExample(ctx context.Context, s *gomcp.ClientSession, srcDir string, budget int) (scenarioResult, error) {
// Naive path: what the agent would read using shell tools.
naive := tokens.Estimate(naiveContent(srcDir))
// remindb path: call the tool and count its response.
text, err := callTool(ctx, s, "MemoryExample", map[string]any{
"budget": budget,
})
if err != nil {
return scenarioResult{}, err
}
return scenarioResult{
name: "example",
naiveTok: naive,
remindbTok: tokens.Estimate(text),
}, nil
}A scenario that runs over multiple inputs (like benchSearch over a query list) returns []scenarioResult instead — one row per input, named with the input as suffix ("search:rate-limit").
Three contracts the function must honor:
tokens.Estimate(string) for both sides. Apples-to-apples comparison only works if the same tokenizer measures both.find + cat * for tree (not wc -c), grep + cat <matches> for search (not just grep). The naive must reflect the real alternative.callTool(ctx, s, name, args) (the package helper in scenarios.go), not raw s.CallTool. It strips the *mcp.CallToolResult boilerplate and returns the text content directly.Runbench.go:Run calls each scenario in sequence and appends to results. Add your call in the natural sequence — Tree first (orientation), then Search, then Fetch, then Delta, then your scenario:
r, err = benchExample(ctx, session, stage.srcDir, cfg.Budget)
if err != nil {
return err
}
results = append(results, r)Or for a multi-result scenario:
rs, err := benchExample(ctx, session, stage.srcDir, cfg.Budget)
if err != nil {
return err
}
results = append(results, rs...)The renderer handles the rest — the table column count and total-row computation are static.
The name field becomes the leftmost column. Use lowercase, hyphenated, prefixed by the tool category if the scenario family has multiple rows:
tree (single)search:rate-limit (one of many search queries)fetch (single)delta (single)Stay under ~30 chars; shorten(s, 30) is the existing helper used by benchSearch.
Most scenarios reuse cfg.Budget and cfg.Queries. Add a new field to bench.Config only when the scenario needs an input that isn't already there — and even then, default it sensibly so existing bench-agents.sh runs don't break.
1. internal/bench/scenarios.go (benchXxx function with naive + remindb paths)
2. internal/bench/bench.go (call site in Run, append to results)
3. (optional) cmd/remindb/... (new flag on the bench subcommand)
4. go build ./... && ./remindb bench --db <path> --dir <path>
5. scripts/bench-agents.sh (full suite — confirms the new row appears for every agent)ls returns 50 tokens — we're 4x worse" misses the point. The naive is what the agent actually does: find . -type f + reading every file. Use the existing helpers (listDirFiles, countDirTokens, grepDir, sumFileTokens).tokens.Estimate. Counting bytes, lines, or words on one side breaks the comparison.tokens.Estimate is over a string, not []byte. Convert byte slices first; mixing produces a confusing compile error since tokens.Estimate is overloaded by neither Go nor remindb.Run returns the first error. If your scenario has expected partial-failure modes (skipped queries, missing fixtures), handle them inside the scenario and emit a scenarioResult{name: "example:skipped", ...} instead of returning err.stageBench copies the DB and source tree to /tmp before running so the user's real DB isn't touched. If you reach for cfg.DBPath directly inside a scenario, you're operating on the original — pass stage.dbPath instead.bench-agents.sh query lists. New scenarios that take per-agent inputs won't be exercised by the CI-style script unless the per-agent map gets entries. For non-input scenarios (like a new fetch variant), no script change is needed..claude/rules/go-concise.md — error wrapping, named locals (naive, remindbTok).claude/skills/add-mcp-tool/SKILL.md — when adding a tool that should be benchmarked, do that skill first; the bench scenario consumes the tool you wiredinternal/bench/render.go — the table renderer; rarely needs changes but read it once if you're adding a column rather than a row© radimsem, 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 .claude/skills/add-bench-scenario of radimsem/remindb.
Open the folder on GitHubat commit 977b31c
Add a remindb Bench Scenario 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 |
|---|---|---|---|---|---|---|
| Add a remindb Bench Scenario this skillradimsem/remindb | 129 | — | ~1.7k | Automated safety check: Pass | MIT | |
| Gograph Go Repository Intelligenceozgurcd/gograph | 229 | — | ~4.8k | Automated safety check: Notes | MIT | |
| Grepaiyoanbernabeu/grepai | 1.9k | — | ~1.1k | Automated safety check: Pass | MIT | |
| Context Handling in fp-goIBM/fp-go | 2k | — | ~4.2k | Automated safety check: Pass | Apache-2.0 | |
| Releaseyoanbernabeu/grepai | 1.9k | — | ~918 | Automated safety check: Pass | MIT | |
| Typed Dependencies with fp-go EffectIBM/fp-go | 2k | — | ~4.3k | Automated safety check: Pass | Apache-2.0 |
ozgurcd/gograph
Gives an agent working in a Go codebase a structural view through a local MCP server: call graphs, blast-radius and impact analysis, and bounded first-call exploration.
yoanbernabeu/grepai
Semantic code search and call-graph tracing. An agent skill from yoanbernabeu/grepai.
IBM/fp-go
Covers handling Go's context.Context idiomatically in fp-go code: reading and scoping context through operators, timeouts, cancellation and converting ctx-first functions.
yoanbernabeu/grepai
Create a new release for grepai. An agent skill from yoanbernabeu/grepai.
IBM/fp-go
Teaches an agent to write fp-go v2 services with the Effect type, carrying dependencies in its type parameter instead of in context.Context or parameters.
SmilyOrg/photofield
Run, test, and debug the photofield server locally. An agent skill from SmilyOrg/photofield.
radimsem/remindb
Guides an agent writing to a remindb memory server: structured notes go in as files parsed into a node tree, single text facts go in through MemoryWrite.
radimsem/remindb
Covers the read-side tools of the remindb MCP server, a SQLite-backed agent memory, for orienting, searching, resyncing and tracing relations.
radimsem/remindb
Adds a new Go fuzz target to remindb following its seed-corpus discipline: one target per logical surface, discovered automatically by its FuzzXxx function name.
radimsem/remindb
Explains how to add an end-to-end test scenario to remindb, choosing between a direct API test and an MCP test and using the shared helpers and fixtures.
radimsem/remindb
Checklist for adding a new Memory-prefixed tool to remindb's Go MCP server: tool file, registration, test, skill docs, plus the locking and logging rules.
radimsem/remindb
Walks through adding a new file format to remindb's Go parser package: the parser file, the ParseBytes case, table tests and fuzz seeds.
Works with
Categories
Adds a new row to remindb's token-savings benchmark table by writing a scenario function that measures the naive shell-tool token cost against the remindb tool-call cost for the same task. The internal/bench package is remindb's external-facing benchmark, comparing how many tokens an agent would spend doing a task with remindb's tools against doing the same task with grep, cat or find, rendered as a token-savings table through text/tabwriter and invoked from the remindb bench CLI subcommand.go files with its own rules.
Add a remindb Bench Scenario fits situations like: adding a new comparison row to remindb's token-savings benchmark; benchmarking a new remindb tool against its naive shell-command equivalent; wiring a new benchmark scenario into the bench CLI subcommand.
Run `npx skills add radimsem/remindb --skill add-bench-scenario -a claude-code`. Or copy the skill folder (.claude/skills/add-bench-scenario in radimsem/remindb) into .claude/skills/add-bench-scenario in your project. Claude Code loads it when a task matches its description.
Run `npx skills add radimsem/remindb --skill add-bench-scenario -a codex`. Or copy the skill folder (.claude/skills/add-bench-scenario in radimsem/remindb) into .agents/skills/add-bench-scenario 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 radimsem/remindb --skill add-bench-scenario -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/add-bench-scenario, .gemini/skills/add-bench-scenario, .github/skills/add-bench-scenario and .opencode/skills/add-bench-scenario in your project.
SKILL.md names no scripts, command-line tools or credentials: Add a remindb Bench Scenario is instructions for the agent only. Our summary lists: Go with the remindb repository checked out.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. 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.
Add a remindb Bench Scenario is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.7k tokens (SKILL.md is roughly 6.9k 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 Add a remindb Bench Scenario: Gograph Go Repository Intelligence (ozgurcd/gograph, 229 stars), Grepai (yoanbernabeu/grepai, 1.9k stars), Context Handling in fp-go (IBM/fp-go, 2k stars) and Release (yoanbernabeu/grepai, 1.9k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
radimsem (a GitHub user) maintains it in radimsem/remindb, which has 129 GitHub stars. The repository holds 11 skills in this directory. The repository was last updated on August 3, 2026.
Source: radimsem/remindb on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.