Help us shape the future of Go! Take the 2026 Go Developer Survey

gofer

module
v0.204.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 30, 2026 License: MIT

README

gofer

English · 中文 · Changelog · User guide

Your agents, your machines, one control plane. Run Claude Code, Codex, ACP agents or plain commands as tracked, reviewable jobs on every machine you own: no cloud in between.

An agent job stops at Needs review with its acceptance criteria, report and changed files on one panel, then is accepted and merged back
  • Worktree isolation, review like a pull request. A job can run in its own git worktree and branch, and stops at needs_review with the report, commits, diff and verify output on one panel; accept it, or reject it with a reason and get an automatic follow-up.
  • One server, many workers. Workers on your other machines and containers dial in to the server, so you never open an inbound port.
  • Terminal sessions, answered from your phone. Register the Claude Code / Codex sessions you already work in, follow them in the web workbench and reply from a phone.
  • No model, no vendor lock-in. gofer embeds no agent and binds no provider: MIT, and one Go binary that ships the web console.

Quick start

eget install inhere/gofer               # or take the archive from GitHub Releases
gofer init server --global              # writes <config-dir>/config.yaml
export GOFER_TOKEN=change-me            # the generated config reads the token from this variable
gofer serve                             # web console at http://<server>:8765/

That is a working server on one machine. Your first job, a second machine as a worker and handing your terminal sessions over to the web are in getting started; below spreads the same steps out.

Status: 0.x — young, and in daily use by its author. Minor versions may still change interfaces: CHANGELOG.md is the authority for what changed, and stability says what you can rely on.

Stability snapshot
Stable enough to rely on Still changing quickly
Jobs and their logs Squad / leader orchestration
Worktree isolation and merge Steward
Human review and acceptance Workspace agent
Worker onboarding and fleet updates Some web console pages
Session registration and relay i18n phase 3: server and web text
Tracker issues and memory
Plans and todos

What it is

You run one gofer server on your main host and, optionally, workers on other machines or containers. Everything you hand over becomes a job with its logs, diff, commits, token usage and review state; people and agents reach the same jobs through the CLI, an HTTP API, MCP and a web console.

It is built for one developer, or a small team that trusts each other. It is not an agent or an LLM itself, not a hosted service, not a CI/CD system or a sandbox, and not a multi-tenant platform: access is token based, and a job runs with the permissions of the gofer process that executes it.

How the pieces fit

flowchart LR
    cli["CLI · MCP · Web · session hooks"] -->|"HTTP · Bearer token"| server["gofer serve<br/>projects · agents · jobs<br/>plans · sessions · tracker"]
    server --> local["server runner<br/>(this host)"]
    server <-->|WebSocket| worker["worker<br/>(other machines, dials in)"]
    local & worker --> agents["claude · codex · omp · exec …"]
  • server (gofer serve) — the single source of truth: projects and their admission rules, job store, scheduler, API and web console. One per machine.
  • worker (gofer worker) — a remote executor that dials into the server, reports its directories and agents, and runs jobs locally. No inbound port needed.
  • agent — the program that does the work. gofer embeds no model; it launches and supervises CLIs you already have.

gofer-workbench

Features

  • Jobs: run Claude Code, Codex, ACP agents or plain commands as tracked jobs — logs, diff, commits, token usage, timeouts, retries and resume of the same agent session.
  • Parallel worktrees: each job can get its own git worktree and branch, then merge back with one command; conflicts abort cleanly.
  • Review gate: jobs stop at needs_review with report, commits, diff and verify output on one panel; accept, or reject with a reason and an automatic follow-up.
  • Plans and workflows: chain todos that dispatch themselves when their dependencies finish; fan out to several agents, compare and pick the best result.
  • Approvals: hold a job until a person approves it, and gate an ACP agent's risky tool calls (edit / execute) behind a human while read-only tools pass.
  • Sessions and relay: register your terminal Claude / Codex sessions, follow them from the web workbench and phone, and send messages into them.
  • Mailbox: sessions and jobs write to each other by address (session: / topic: / job:), with urgent letters, broadcasts, bounces and resident agents that answer mail.
  • Today and work items: one decision queue for everything waiting on you, plus long-running work items that sessions report progress into.
  • Repository tracker and memory: issues and agent memories stored in the repository (.gofer/tracker), searchable from the web across projects and injected into sessions when relevant.
  • Workers: add machines or containers as workers that dial in — no inbound port — and upgrade the whole fleet, any OS / arch, from the console.
  • Schedules: cron or one-off jobs with parameters, run now from the web.
  • Web console: desktop and phone layouts, Chinese / English, light / dark, desktop and Web Push notifications, PWA.
  • Access and security: token-based callers with permission ceilings, per-project admission rules, secret redaction in logs and config views.
  • Integrations: CLI, HTTP API, MCP server and session hooks reach the same jobs; DingTalk / Feishu / webhook notifications and TCP tunnels.

Install

  1. Release package (recommended) — includes the built-in web console:

    • eget: eget install inhere/gofer
    • or download the archive for your platform from GitHub Releases, extract it, and put the gofer binary (gofer.exe on Windows) on your PATH.
  2. go install — CLI, HTTP API and MCP only, without the web console (it shows a placeholder page):

    go install github.com/inhere/gofer/cmd/gofer@latest
    
  3. From source — Go 1.26+; Node.js and pnpm only if you build the console:

    make web build        # console embedded, binary in dist/gofer
    make install          # same, then copy to $GOPATH/bin
    

Same binary in all three cases; only the embedded frontend differs.

Full walkthrough (about 10 minutes)

1. Server

On the machine that owns your projects:

gofer init server --global          # writes <config-dir>/config.yaml (default ~/.config/gofer)
export GOFER_TOKEN=change-me        # the generated config reads the token from GOFER_TOKEN

gofer project add <project> --host-path /abs/path/to/<project> \
  --default-agent codex --allow-agent codex --allow-agent claude --allow-agent exec \
  --allow-runner server --allow-exec
gofer config validate
gofer serve                         # foreground; `gofer serve -d` for background,
                                    # `gofer serve register` for a managed service

The token line is POSIX shell; on Windows use $env:GOFER_TOKEN = "change-me" and <config-dir> is %USERPROFILE%\.config\gofer.

2. Your first job
gofer job run -p <project> -a exec --title "hello" --sync -- go version   # a command
gofer job logs <id>                                                       # its output

gofer job run -p <project> -a claude --title "look around" --review \
  --prompt "Explain how this repository is built"
gofer job watch <id>          # follow it live
gofer job review <id>         # report, commits, diff, verify, usage on one screen
gofer job accept <id>         # or: gofer job reject <id> --note "…" --resume

exec runs the argv after -- (no shell); claude / codex / omp / … run an agent. Agent jobs can be isolated in a git worktree (--worktree), held for approval before running (--hold), and parked for human review (--review). See getting started for these and for the pitfalls at each step.

3. Open the web console

http://<server>:8765/ — paste the token. The home page ("Today") is one queue of everything waiting for a decision: approvals, questions, reviews, sessions waiting for a reply. It works on a phone too.

4. Optional: add another machine
# on the server (admin token): register the worker, print its one-time token
gofer worker add <worker-id> --project <project>
# on that machine: infer directories, probe agents, write worker.yaml, self-check
gofer worker init --server http://<server>:8765 --id <worker-id> --token <one-time token>
gofer worker -d

gofer job run -p <project> -a claude --runner <worker-id> --prompt "…"

Or let the worker ask to be admitted (server.worker_enrollment): gofer worker join --server http://<server>:8765, then accept the pairing code in the console.

5. Optional: hand your terminal sessions over to the web
gofer init hooks --agent all --global   # register Claude Code / Codex / omp sessions
gofer init skill --global               # install the gofer-usage skill for agents
gofer session relay on                  # this session now waits on the web when it stops

Now a session that stops can be answered from the browser or phone, woken up again (gofer session resume) or nudged on a timer (gofer session nudge).

Documentation

Where What
docs/guide/en/ Start here (English). Getting started, concepts, features, security
docs/guide/ The same guide in Chinese, wider coverage: scenarios, configuration, troubleshooting, stability, development
skills/gofer-usage/ The same platform for agents: command reference, config fields, protocol notes (kept in sync with every release)
docs/reference/ HTTP API, permissions catalogue, web console details
docs/runbook/ Step-by-step operating guides (session relay, container worker, tunnels, HTTPS/PWA, Web Push, managed server, worktrees, retries…)
docs/design/ Design records for each feature
CHANGELOG.md What changed in each release (Chinese)

Most runbooks, design records and the rest of the guide are written in Chinese; the English starting points are in docs/guide/en/. The command line, gofer <cmd> -h, is authoritative for flags.

Contributing

See CONTRIBUTING.md for how to build, the checks to run before you push, the commit style and what a good issue or pull request looks like; docs/guide/development.md covers the same ground in Chinese, and AGENTS.md holds the project rules (layering, CLI conventions, compatibility policy, shared utilities) for contributors working with an AI agent. User-visible changes update skills/gofer-usage/ and get an entry in CHANGELOG.md under "未发布" in the same change set. Report security problems privately, as described in SECURITY.md.

gofer is one answer to "how do I run coding agents on more than one machine and keep track of what they are doing?". The projects below are good at parts of the same problem; gofer differs mainly in shape — it is a small server plus workers, with an HTTP / MCP API, rather than a single-machine desktop app.

  • Claude Code Remote Control — keeps a Claude Code session within reach when you leave the terminal, continuing it from a browser or phone; it is centred on Claude Code, while gofer treats any agent (Claude Code, codex, ACP agents, plain commands) as an asynchronous job with plans, review and workers on several machines.
  • Conductor — a polished macOS app that runs several Claude Code / Codex / Cursor agents in isolated git worktrees so you can review and merge their changes side by side; gofer runs headless on its own server, so the same jobs can come from a browser, the CLI, another agent over MCP or CI, and its console is web-first instead of a native app.
  • Superset — a desktop IDE that runs Claude Code, Codex and other CLI agents in parallel, one git worktree per task, with built-in review and remote workspaces; gofer takes the task-queue angle: durable jobs and plans, dispatch per worker, retries, schedules and an API other tools build on.
  • Kero — a native terminal app for coding agents: sessions keep running in a small daemon, each pane shows whether its agent is working, waiting or done, and remote hosts join the same sidebar over SSH or Tailscale; gofer is a server plus workers with a web console, and adds review, plans and an API on top of the sessions.

License

MIT

Directories

Path Synopsis
cmd
gofer command
Package configtmpl embeds the canonical gofer.example.yaml so that `gofer init` can write the same starter template that ships as the documented example — one source of truth, no drift between the example file and what init emits.
Package configtmpl embeds the canonical gofer.example.yaml so that `gofer init` can write the same starter template that ships as the documented example — one source of truth, no drift between the example file and what init emits.
Package hooks embeds the agent-CLI hook templates `gofer init hooks` merges into a project's (or the user's) Claude Code / Codex hook configuration — one source of truth, no drift between the tracked hooks/ tree and what init writes out (same rationale as skills/embed.go).
Package hooks embeds the agent-CLI hook templates `gofer init hooks` merges into a project's (or the user's) Claude Code / Codex hook configuration — one source of truth, no drift between the tracked hooks/ tree and what init writes out (same rationale as skills/embed.go).
internal
acp
Package acp implements a minimal Agent Client Protocol (ACP) client: gofer spawns an ACP agent as a child process and drives one prompt turn over its stdio (JSON-RPC 2.0, one message per line).
Package acp implements a minimal Agent Client Protocol (ACP) client: gofer spawns an ACP agent as a child process and drives one prompt turn over its stdio (JSON-RPC 2.0, one message per line).
acp/acptest
Package acptest provides an in-repo fake ACP agent: a scripted JSON-RPC 2.0 stdio server used as a test double for internal/acp and internal/runner/acp.
Package acptest provides an in-repo fake ACP agent: a scripted JSON-RPC 2.0 stdio server used as a test double for internal/acp and internal/runner/acp.
agent
Package agent provides the agent registry, command-template rendering, the adapter that turns a job request into an executable argv, and a detect probe.
Package agent provides the agent registry, command-template rendering, the adapter that turns a job request into an executable argv, and a detect probe.
attachment
Package attachment stores the images a user uploads before sending them with a workbench message (design 2026-10-19-workbench-image-attachments-design.md 「附件存储(server)」).
Package attachment stores the images a user uploads before sending them with a workbench message (design 2026-10-19-workbench-image-attachments-design.md 「附件存储(server)」).
authz
Package authz is the permission catalog and the pattern rules that turn a grant pattern into the set of permissions the grant means — design §1「权限目录(40 项)」 and §2「授权模型与判定」of docs/design/2026-10-14-db-capabilities-and-session-grants-design.md.
Package authz is the permission catalog and the pattern rules that turn a grant pattern into the set of permissions the grant means — design §1「权限目录(40 项)」 and §2「授权模型与判定」of docs/design/2026-10-14-db-capabilities-and-session-grants-design.md.
bdmigrate
Package bdmigrate moves a repository from bd (beads) to the gofer tracker: issues and memories, the managed instruction blocks, the agent hooks and core.hooksPath.
Package bdmigrate moves a repository from bd (beads) to the gofer tracker: issues and memories, the managed instruction blocks, the agent hooks and core.hooksPath.
brief
Package brief assembles the handoff brief (接手包, design 2026-10-10-handoff-brief-and-knowledge-loop §一): everything a fresh agent session needs to take over an issue or a plan, in one bounded text.
Package brief assembles the handoff brief (接手包, design 2026-10-10-handoff-brief-and-knowledge-loop §一): everything a fresh agent session needs to take over an issue or a plan, in one bounded text.
castrec
Package castrec records a pty relay's output stream as an asciinema v2 "cast" file, optionally wrapped in a framed AES-256-GCM envelope (D-P3-4).
Package castrec records a pty relay's output stream as an asciinema v2 "cast" file, optionally wrapped in a framed AES-256-GCM envelope (D-P3-4).
certutil
Package certutil creates the local CA and server certificate used by gofer's optional HTTPS listener.
Package certutil creates the local CA and server certificate used by gofer's optional HTTPS listener.
changelog
Package changelog merges a Keep a Changelog style CHANGELOG.md as a git merge driver: the entries of the "unreleased" section (grouped by its `### ` subsections) are unioned, everything else goes through git's own line merge.
Package changelog merges a Keep a Changelog style CHANGELOG.md as a git merge driver: the entries of the "unreleased" section (grouped by its `### ` subsections) are unioned, everything else goes through git's own line merge.
client
Package client is a thin HTTP client for the gofer control plane.
Package client is a thin HTTP client for the gofer control plane.
config
Caller scope ceilings (上限): the operator-declared upper bound of what ONE caller (one token) may reach, and the load-time checks that keep a ceiling honest.
Caller scope ceilings (上限): the operator-declared upper bound of what ONE caller (one token) may reach, and the load-time checks that keep a ceiling honest.
configlint
Package configlint finds config keys that can be deleted without changing what gofer actually runs with (`gofer config lint`, gofer-arsj).
Package configlint finds config keys that can be deleted without changing what gofer actually runs with (`gofer config lint`, gofer-arsj).
daemon
Package daemon turns a foreground gofer process (serve / worker) into a detached background process.
Package daemon turns a foreground gofer process (serve / worker) into a detached background process.
delivery
Package delivery hands a worktree job's branch over (GIT-02, design 2026-10-12-delivery-and-cost-estimate-design.md): merge it into the base branch, push it to a remote, or push it and open a pull / merge request on GitHub, GitLab or Gitea / Forgejo.
Package delivery hands a worktree job's branch over (GIT-02, design 2026-10-12-delivery-and-cost-estimate-design.md): merge it into the base branch, push it to a remote, or push it and open a pull / merge request on GitHub, GitLab or Gitea / Forgejo.
desktop
Package desktop shows a notification on the machine's OWN desktop — the channel a server uses to reach a person who is neither watching the console nor a chat client (an approval parked for hours, a session waiting for a reply).
Package desktop shows a notification on the machine's OWN desktop — the channel a server uses to reach a person who is neither watching the console nor a chat client (an approval parked for hours, a session waiting for a reply).
focusremote
Package focusremote gathers the server-side part of the tracker prime 「当前重点」 section (the server version, the workers serving this project and its open plans).
Package focusremote gathers the server-side part of the tracker prime 「当前重点」 section (the server version, the workers serving this project and its open plans).
hookrelay
Package hookrelay is the agent-CLI hook executor behind `gofer hook <agent>` (session relay, SESS-01 D1/D5).
Package hookrelay is the agent-CLI hook executor behind `gofer hook <agent>` (session relay, SESS-01 D1/D5).
httpapi
授权管理接口(设计 docs/design/2026-10-14-db-capabilities-and-session-grants-design.md 「接口」一节、§2「授权模型与判定」与 §4「会话授权」,计划 T2.1)。
授权管理接口(设计 docs/design/2026-10-14-db-capabilities-and-session-grants-design.md 「接口」一节、§2「授权模型与判定」与 §4「会话授权」,计划 T2.1)。
httpapi/authzgen command
Command authzgen writes the generated permission reference (docs/reference/permissions.md) from the running code: the permission catalog and the route declaration table.
Command authzgen writes the generated permission reference (docs/reference/permissions.md) from the running code: the permission catalog and the route declaration table.
i18n
Package i18n is gofer's language model: the canonical language tags, the ONE alias normalizer every entry point uses, where a text's language comes from, and the two text catalogs — short strings (gookit/i18n INI files under lang/) and long prompt templates (the prompts subpackage).
Package i18n is gofer's language model: the canonical language tags, the ONE alias normalizer every entry point uses, where a text's language comes from, and the two text catalogs — short strings (gookit/i18n INI files under lang/) and long prompt templates (the prompts subpackage).
i18n/prompts
Package prompts holds the LONG agent-facing texts — the sections gofer appends to a job's prompt and the time-limit notice — as one text/template per language, loaded from an embed.FS and parsed at startup.
Package prompts holds the LONG agent-facing texts — the sections gofer appends to a job's prompt and the time-limit notice — as one text/template per language, loaded from an embed.FS and parsed at startup.
inbox
Package inbox projects Today cards into the two stable user-facing columns.
Package inbox projects Today cards into the two stable user-facing columns.
job
Caller ceilings on the JOB side (design 2026-10-18, 上限所有者 / 准入).
Caller ceilings on the JOB side (design 2026-10-18, 上限所有者 / 准入).
jobstore
Package jobstore is the SQLite-backed metadata/index store for gofer jobs.
Package jobstore is the SQLite-backed metadata/index store for gofer jobs.
logx
Package logx configures the process-wide structured logger (slog) for gofer.
Package logx configures the process-wide structured logger (slog) for gofer.
mail
Package mail is the gofer 信箱's business layer (design 2026-10-16-session-topics-mailbox-and-inbox-design.md 「二、gofer 信箱」): sending a letter to an address, resolving that address to the ONE session / job / caller it names, stamping where the letter came from, and parking what cannot be delivered in the capture box.
Package mail is the gofer 信箱's business layer (design 2026-10-16-session-topics-mailbox-and-inbox-design.md 「二、gofer 信箱」): sending a letter to an address, resolving that address to the ONE session / job / caller it names, stamping where the letter came from, and parking what cannot be delivered in the capture box.
mcpprobe
Package mcpprobe checks that a registry MCP server (MCP-06) can be reached from this machine: it starts (stdio) or connects to (http) the server with the declaration's environment and headers, performs the MCP handshake and lists the tools.
Package mcpprobe checks that a registry MCP server (MCP-06) can be reached from this machine: it starts (stdio) or connects to (http) the server with the declaration's environment and headers, performs the MCP handshake and lists the tools.
mcpserver
Package mcpserver exposes the gofer control plane as a stdio MCP server (plan P8).
Package mcpserver exposes the gofer control plane as a stdio MCP server (plan P8).
mcptools
Package mcptools is the single registry of gofer's OWN MCP tools (the gofer_* tools internal/mcpserver exposes) and of what each one does to state.
Package mcptools is the single registry of gofer's OWN MCP tools (the gofer_* tools internal/mcpserver exposes) and of what each one does to state.
memorysynthesis
Package memorysynthesis contains the bounded, privacy-filtered material envelope used by daily memory synthesis.
Package memorysynthesis contains the bounded, privacy-filtered material envelope used by daily memory synthesis.
messenger
Package messenger owns the stream-json process bridge used to deliver a message to an agent session.
Package messenger owns the stream-json process bridge used to deliver a message to an agent session.
metrics
Package metrics is the gofer Prometheus instrumentation (E16, design §6).
Package metrics is the gofer Prometheus instrumentation (E16, design §6).
msgprefix
Package msgprefix is the ONE table of the prefixes gofer puts in front of the text it delivers into an agent session (design 2026-10-22-message-prefixes, D1; localized forms: design 2026-10-27-i18n-design.md §5 / §9.3):
Package msgprefix is the ONE table of the prefixes gofer puts in front of the text it delivers into an agent session (design 2026-10-22-message-prefixes, D1; localized forms: design 2026-10-27-i18n-design.md §5 / §9.3):
netproxy
Package netproxy routes the server's outbound HTTP through the configured http_proxy for the allowed sites (gofer-29gi).
Package netproxy routes the server's outbound HTTP through the configured http_proxy for the allowed sites (gofer-29gi).
notify
Package notify implements the E14 webhook outbound side (design §5.5–5.7): it validates a webhook URL against the outbound allowlist + SSRF rules, signs and POSTs the delivery body, and matches an event to its subscribed webhooks.
Package notify implements the E14 webhook outbound side (design §5.5–5.7): it validates a webhook URL against the outbound allowlist + SSRF rules, signs and POSTs the delivery body, and matches an event to its subscribed webhooks.
overview
Package overview builds the dashboard statistics wall (gofer-yelm, design docs/design/2026-10-09-dashboard-redesign-design.md): GET /v1/stats/overview folds the jobs that ENDED inside a range (plus their job_metrics rows), the reviews, the plans and the terminal-session usage into one payload, and caches it per (range, tz).
Package overview builds the dashboard statistics wall (gofer-yelm, design docs/design/2026-10-09-dashboard-redesign-design.md): GET /v1/stats/overview folds the jobs that ENDED inside a range (plus their job_metrics rows), the reviews, the plans and the terminal-session usage into one payload, and caches it per (range, tz).
preview
Package preview implements server-local job preview leases and loopback proxying.
Package preview implements server-local job preview leases and loopback proxying.
procattr
Package procattr holds the one platform-specific tweak every NON-interactive child process needs: on Windows a process without a console (a `gofer worker -d` / `serve -d` daemon runs detached) that starts a console program (git, claude.cmd, npx ...) makes Windows open a fresh console window for EVERY such child.
Package procattr holds the one platform-specific tweak every NON-interactive child process needs: on Windows a process without a console (a `gofer worker -d` / `serve -d` daemon runs detached) that starts a console program (git, claude.cmd, npx ...) makes Windows open a fresh console window for EVERY such child.
proctree
Package proctree holds one spawned process and the descendants it spawns, so a caller can kill the WHOLE tree instead of only the direct child.
Package proctree holds one spawned process and the descendants it spawns, so a caller can kill the WHOLE tree instead of only the direct child.
ptyrelay
Package ptyrelay is the serve-side per-session pty relay (WEB-03 design §6, K2/K6): it consumes a PtySource (the raw byte stream from a worker's pty over the dedicated pty ws, or a serve-local ptmx) and drives TWO independent backpressure layers:
Package ptyrelay is the serve-side per-session pty relay (WEB-03 design §6, K2/K6): it consumes a PtySource (the raw byte stream from a worker's pty over the dedicated pty ws, or a serve-local ptmx) and drives TWO independent backpressure layers:
pushhub
Package pushhub is the in-process fan-out behind the browser's single /v1/ws connection (Q2).
Package pushhub is the in-process fan-out behind the browser's single /v1/ws connection (Q2).
refs
Package refs extracts references to gofer objects from free-form text.
Package refs extracts references to gofer objects from free-form text.
rule
Package rule is the gofer RULE library (JOB-06①, design §一.1): a rule is a short, MANDATORY piece of discipline the server owns and injects at the TOP of every job prompt that binds it ("改文件只用 apply_patch", "测试先写先提交").
Package rule is the gofer RULE library (JOB-06①, design §一.1): a rule is a short, MANDATORY piece of discipline the server owns and injects at the TOP of every job prompt that binds it ("改文件只用 apply_patch", "测试先写先提交").
runner
Package runner abstracts where a job's process executes.
Package runner abstracts where a job's process executes.
runner/acp
Package acp runs an `acp-agent` job: it starts the agent's ACP server over stdio, drives exactly one prompt turn (initialize → session/new → session/prompt) and maps the protocol's events onto the job's outputs.
Package acp runs an `acp-agent` job: it starts the agent's ACP server over stdio, drives exactly one prompt turn (initialize → session/new → session/prompt) and maps the protocol's events onto the job's outputs.
runner/local
Package local implements the in-process (local host) runner.
Package local implements the in-process (local host) runner.
runner/ndjsonfilter
Package ndjsonfilter turns a structured (NDJSON / JSON-Lines) agent output stream into the two streams gofer captures (bd h-aii-rpky, bd h-aii-525u).
Package ndjsonfilter turns a structured (NDJSON / JSON-Lines) agent output stream into the two streams gofer captures (bd h-aii-rpky, bd h-aii-525u).
runner/peerhttp
Package peerhttp implements a remote runner that forwards a job to a peer gofer over HTTP (plan §11.1, P7).
Package peerhttp implements a remote runner that forwards a job to a peer gofer over HTTP (plan §11.1, P7).
runner/pty
Package ptyrunner is the worker-side runner variant for interactive (pty-attached) jobs (WEB-03 design §5/§6, D1).
Package ptyrunner is the worker-side runner variant for interactive (pty-attached) jobs (WEB-03 design §5/§6, D1).
runner/worker
Package worker implements the ws-worker host-side runner (main plan §4, internal/runner/worker).
Package worker implements the ws-worker host-side runner (main plan §4, internal/runner/worker).
secret
Package secret holds credential-redaction primitives shared by the workflow export path and the job request-redact path.
Package secret holds credential-redaction primitives shared by the workflow export path and the job request-redact path.
serve
Package serve holds the serve process orchestration (BP2): it builds the runtime Core, starts the periodic sweepers / health probe / SIGHUP reload loops, wires the httpapi server and blocks until the server stops.
Package serve holds the serve process orchestration (BP2): it builds the runtime Core, starts the periodic sweepers / health probe / SIGHUP reload loops, wires the httpapi server and blocks until the server stops.
servicemgr
Package servicemgr owns the local metadata and coordination primitives used by the native Windows and Linux service backends.
Package servicemgr owns the local metadata and coordination primitives used by the native Windows and Linux service backends.
sessionrelay
Package sessionrelay is the session-relay domain service (SESS-01): terminal agent-CLI sessions (Claude Code / Codex) register themselves through their hooks, the web observes them, and while a session's relay switch is on the Stop hook posts the agent's last message as a "turn" and blocks until a human answers it on the web — the answer is injected back into the SAME terminal session via the hook's `decision: block` continuation.
Package sessionrelay is the session-relay domain service (SESS-01): terminal agent-CLI sessions (Claude Code / Codex) register themselves through their hooks, the web observes them, and while a session's relay switch is on the Stop hook posts the agent's last message as a "turn" and blocks until a human answers it on the web — the answer is injected back into the SAME terminal session via the hook's `decision: block` continuation.
settings
Package settings is the extension-settings registry and service: runtime-adjustable knobs (prompts, thresholds, exclusion lists) stored in the database instead of config.yaml, so a change applies immediately without restarting the server.
Package settings is the extension-settings registry and service: runtime-adjustable knobs (prompts, thresholds, exclusion lists) stored in the database instead of config.yaml, so a change applies immediately without restarting the server.
skill
Package skill is the gofer-side skill library (JOB-10, design docs/design/2026-09-23-skills-binding-and-comment-routing-design.md §一): a skill is a directory of "working method" knowledge — a required SKILL.md plus attachments — that lives WITH THE SERVER, not in the project tree, so a job can be handed it without a concurrent job seeing it and without git ever tracking it.
Package skill is the gofer-side skill library (JOB-10, design docs/design/2026-09-23-skills-binding-and-comment-routing-design.md §一): a skill is a directory of "working method" knowledge — a required SKILL.md plus attachments — that lives WITH THE SERVER, not in the project tree, so a job can be handed it without a concurrent job seeing it and without git ever tracking it.
steward
Package steward is the W2b steward (design 2026-10-05 §9 / §14.4): a resident ACP session that only schedules and tidies the work items — it reads, notes, reminds, suggests merges and asks sessions to report, but never decides (no done / dropped, no job submit, no config).
Package steward is the W2b steward (design 2026-10-05 §9 / §14.4): a resident ACP session that only schedules and tidies the work items — it reads, notes, reminds, suggests merges and asks sessions to report, but never decides (no done / dropped, no job submit, no config).
store
Package store persists per-job log artifacts under a single result directory (<result_dir>/<job_id>/): the live stdout/stderr logs streamed by the local runner.
Package store persists per-job log artifacts under a single result directory (<result_dir>/<job_id>/): the live stdout/stderr logs streamed by the local runner.
streaming
Package streaming holds the job log/event/interaction SSE streaming orchestration.
Package streaming holds the job log/event/interaction SSE streaming orchestration.
template
Package template implements gofer task-book templates (SUP-01 P5, design §六): a markdown file with an optional YAML frontmatter, living in <project>/.gofer/templates/ or <config-dir>/templates/, that a submit renders into a job prompt.
Package template implements gofer task-book templates (SUP-01 P5, design §六): a markdown file with an optional YAML frontmatter, living in <project>/.gofer/templates/ or <config-dir>/templates/, that a submit renders into a job prompt.
testutil/gitenv
Package gitenv quiets git for tests that create repositories in a TempDir.
Package gitenv quiets git for tests that create repositories in a TempDir.
testutil/wait
Package wait gives tests load-tolerant waits (gofer-r7am, design docs/design/2026-10-10-flaky-tests-root-cause.md §2.4).
Package wait gives tests load-tolerant waits (gofer-r7am, design docs/design/2026-10-10-flaky-tests-root-cause.md §2.4).
today
Package today is the N3 「今天」 decision home (design docs/design/2026-10-09-n3-today-decision-home-design.md §1/§2): it folds every "a person must decide" signal — pending interactions, OPEN decisions, relay turns, needs_review jobs, jobs held for approval, work items that wait for the person, the status / goal tidy-up suggestions, merge suggestions and blocked plans — into one ordered card queue, plus the one-line digest and the status bar.
Package today is the N3 「今天」 decision home (design docs/design/2026-10-09-n3-today-decision-home-design.md §1/§2): it folds every "a person must decide" signal — pending interactions, OPEN decisions, relay turns, needs_review jobs, jobs held for approval, work items that wait for the person, the status / goal tidy-up suggestions, merge suggestions and blocked plans — into one ordered card queue, plus the one-line digest and the status bar.
tracker
Package tracker owns the repository-local issue and memory JSONL truth.
Package tracker owns the repository-local issue and memory JSONL truth.
trigger
Package trigger contains the provider-neutral, authenticated trigger dispatch core.
Package trigger contains the provider-neutral, authenticated trigger dispatch core.
tunnel
Package tunnel is a leaf implementation of TCP tunnel protocols and data forwarding.
Package tunnel is a leaf implementation of TCP tunnel protocols and data forwarding.
updatecheck
Package updatecheck looks for a newer gofer release (gofer-6x2n, docs/design/2026-10-13-update-check-design.md): the latest GitHub release by default, or a mirror's latest.yaml.
Package updatecheck looks for a newer gofer release (gofer-6x2n, docs/design/2026-10-13-update-check-design.md): the latest GitHub release by default, or a mirror's latest.yaml.
util
Package util contains the file-only part of Gofer binary upgrades.
Package util contains the file-only part of Gofer binary upgrades.
webpush
Package webpush owns browser Web Push encryption, VAPID identity, subscriptions, one-time notification actions and asynchronous event dispatch.
Package webpush owns browser Web Push encryption, VAPID identity, subscriptions, one-time notification actions and asynchronous event dispatch.
webui
Package webui embeds the gofer web console static assets into the binary so `serve` can mount the SPA without any external files.
Package webui embeds the gofer web console static assets into the binary so `serve` can mount the SPA without any external files.
work
Package work is the work-item domain service (W1, design 2026-10-05): the layer above terminal sessions that records "what the human is doing", derives its status from the sessions, tracks reminders and produces the daily digest.
Package work is the work-item domain service (W1, design 2026-10-05): the layer above terminal sessions that records "what the human is doing", derives its status from the sessions, tracks reminders and produces the daily digest.
work/transcript
Package transcript turns an agent CLI's own session file into a short list of conversation turns for the work-item summarizer (W2a, design §14.2).
Package transcript turns an agent CLI's own session file into a short list of conversation turns for the work-item summarizer (W2a, design §14.2).
workbench
Package workbench projects persisted jobs and relay sessions into the conversation-first WEB-11 model.
Package workbench projects persisted jobs and relay sessions into the conversation-first WEB-11 model.
worker
Package worker is the ws-worker client (main plan §4, §6): a `gofer worker` process dials the central hub over a single WebSocket, registers, and then receives job dispatches which it runs LOCALLY with its own job.Service / local runner (review #8: the worker re-validates project/agent/exec with its own config).
Package worker is the ws-worker client (main plan §4, §6): a `gofer worker` process dials the central hub over a single WebSocket, registers, and then receives job dispatches which it runs LOCALLY with its own job.Service / local runner (review #8: the worker re-validates project/agent/exec with its own config).
workerenroll
Package workerenroll is the business layer of worker self-enrollment (design 2026-10-17-worker-self-enrollment): the request state machine (pending -> accepting -> accepted -> collected, or rejected / expired / superseded / cancelled), the pairing code and enroll-secret checks, and the audit trail.
Package workerenroll is the business layer of worker self-enrollment (design 2026-10-17-worker-self-enrollment): the request state machine (pending -> accepting -> accepted -> collected, or rejected / expired / superseded / cancelled), the pairing code and enroll-secret checks, and the audit trail.
workerupgrade
Package workerupgrade is the server-side bookkeeping of remote worker binary upgrades (design 2026-10-03-worker-remote-upgrade, U1): it stages the binary a worker will download (one file per worker id under <run>/upgrade/) and records the outcome of the latest upgrade per worker.
Package workerupgrade is the server-side bookkeeping of remote worker binary upgrades (design 2026-10-03-worker-remote-upgrade, U1): it stages the binary a worker will download (one file per worker id under <run>/upgrade/) and records the outcome of the latest upgrade per worker.
workflowstep
Package workflowstep is the registry of gofer's built-in workflow steps — the steps a workflow names with `uses: gofer/<name>` and parametrises with `with:` (design 2026-10-21 §一·5).
Package workflowstep is the registry of gofer's built-in workflow steps — the steps a workflow names with `uses: gofer/<name>` and parametrises with `with:` (design 2026-10-21 §一·5).
wsproto
Package wsproto defines the WebSocket message protocol shared by the hub (internal/wshub, serve-side) and the worker client (internal/worker).
Package wsproto defines the WebSocket message protocol shared by the hub (internal/wshub, serve-side) and the worker client (internal/worker).
xfer
Package xfer implements XFER-01's transfer staging area and journal: the on-disk staging directory a transfer's payload passes through (<root>/xfer/<id>/data) and the business operations recorded against it (stage a put/get, dispatch it to the executing machine, settle it done/failed, expire it).
Package xfer implements XFER-01's transfer staging area and journal: the on-disk staging directory a transfer's payload passes through (<root>/xfer/<id>/data) and the business operations recorded against it (stage a put/get, dispatch it to the executing machine, settle it done/failed, expire it).
scripts
smoke/decision-channel/mcpcall command
mcp-call is a minimal one-shot MCP stdio client for the decision-channel smoke (scripts/smoke/decision-channel).
mcp-call is a minimal one-shot MCP stdio client for the decision-channel smoke (scripts/smoke/decision-channel).
smoke/tunnel/tunsmoke command
Command tunsmoke is a stdlib-only helper for the TUN-01 container smoke test (scripts/smoke/tunnel/run-smoke.sh).
Command tunsmoke is a stdlib-only helper for the TUN-01 container smoke test (scripts/smoke/tunnel/run-smoke.sh).
tracker-transfer command
tracker-transfer is a one-time offline repository tracker transfer tool.
tracker-transfer is a one-time offline repository tracker transfer tool.
Package skills embeds the shipped agent skills so `gofer init skill` can install them from the binary — one source of truth, no drift between the tracked skills/ tree and what init writes out.
Package skills embeds the shipped agent skills so `gofer init skill` can install them from the binary — one source of truth, no drift between the tracked skills/ tree and what init writes out.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL