Frog

Keeps a friction log for coding agents in the repo and turns each entry into a GitHub issue

By wevm TypeScript Local · stdio Developer toolsGit and code hosting

62 popularity score ★ 267 ↓ 13k/wk

Connect your client

Local (npm)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

Claude CodeTerminal
claude mcp add frog -- npx -y frog --mcp
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "frog": {
      "command": "npx",
      "args": [
        "-y",
        "frog",
        "--mcp"
      ]
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "frog": {
      "command": "npx",
      "args": [
        "-y",
        "frog",
        "--mcp"
      ]
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "frog": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "frog",
        "--mcp"
      ]
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.frog]
command = "npx"
args = ["-y", "frog", "--mcp"]
Gemini CLITerminal
gemini mcp add --scope user frog npx -- -y frog --mcp

Settings 4

GITHUB_TOKEN Optional: GitHub token used to publish and sync issues; GH_TOKEN or a logged-in gh CLI also work.
FROG_DATABASE_URL Optional: PostgreSQL URL; when set, entries are kept in Postgres instead of files.
FROG_NAMESPACE Optional: Namespace within the Postgres store; defaults to default.
FROG_SCHEMA Optional: Postgres schema to use for the store.

What it does

Frog is a command-line tool from wevm that gives a coding agent a place to record the problems it runs into while working: a confusing config loader, a flaky test command, a missing doc. Each problem becomes a folder under `.agents/friction-log/` in the project, holding a markdown write-up and, optionally, files that reproduce it. The folder is committed with the code, so the next agent can read it before guessing.

Entries are then published as GitHub issues and removed again once those issues close, so the log only holds open problems. An entry can also be aimed at a dependency instead of your own repository, either an npm package or an `owner/repo`, but only when that project has opted in through config on its default branch; Frog then fills the entry from that project's own issue form.

The same program runs as an MCP server over stdio when started with `--mcp`, exposing its eight commands (init, list, log, migrate, publish, resolve, sync, targets) as tools. Entries are stored as files by default; setting `FROG_DATABASE_URL` to a Postgres URL switches to a shared database store, with `FROG_NAMESPACE` (default `default`) and `FROG_SCHEMA` as further settings, read in src/cli/Cli.ts. Automation on pull requests comes from a separate GitHub App or a GitHub Action workflow, not from the MCP server.

What it needs

RuntimeNode.js 22+

Node.js 22 or newer (the package's engines field). A git project to keep the log in. Publishing and syncing issues need a GitHub token with access to the target repository, taken from `GITHUB_TOKEN`, `GH_TOKEN` or a logged-in GitHub CLI (`gh`). The Postgres store needs a reachable PostgreSQL database and a one-off `frog migrate`.

Limits

Issues go to GitHub only. Of the database stores, only PostgreSQL is available; SQLite and Cloudflare D1 are listed as coming soon. Reporting upstream works only for projects that have opted in through their own repository config. The README warns against running the GitHub App mode and the Action-only mode in the same repository, as both can open duplicate issues. Without a token, GitHub reads are anonymous at a lower rate limit, per src/cli/internal/octokit.ts.

Who it suits

Teams that let coding agents work in their repositories and want the agents' complaints captured as tracked GitHub issues instead of lost in chat. It writes to the project tree and to GitHub issues, so it fits repos where the agent already has commit and issue access. It is no help for projects hosted outside GitHub, and it is not a general memory store: entries exist only until their issue is closed.

Tools 8

init
Creates the friction log folder, its config and a GitHub issue form in the project
list
Shows open entries, whether each is reported, its target and whether it has a reproduction
log
Writes a new friction entry, optionally publishing it as an issue at once
migrate
Creates or upgrades the selected store, such as the Postgres tables
publish
Reports pending entries as GitHub issues
resolve
Removes one entry whose problem has been fixed
sync
Checks entries against their issues and drops those whose issues are closed
targets
Lists dependencies that accept friction reports

Similar servers