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

gofer

module
v0.140.0 Latest Latest
Warning

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

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

README

gofer

English · 中文 · Changelog

gofer is a self-hosted control plane that runs coding agents — Claude Code, Codex, ACP agents or plain commands — as tracked, reviewable jobs inside your real projects, on your own machines.

You run one gofer server on your main host and, optionally, workers on other machines or containers. Every piece of work — a one-off command, an agent prompt, a long-running ACP conversation, a step in a multi-step plan — becomes a job bound to a registered project and a runner, with its logs, diff, commits, token usage and a review state. People and agents reach the same control plane through the CLI, an HTTP API, MCP and a web console, and a repository-local tracker (issues, memories, session primes, handoff briefs) gives every new agent session the context the last one left behind.

It is built for one developer, or a small team that trusts each other, driving several coding agents across a few machines. 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.

Core capabilities:

  • Run anywhere you have a checkout — on the server host or on remote workers (WebSocket, label routing, server-pushed project policy), with git worktree isolation, same-directory locks, reconnect recovery, file transfer and TCP/UDP tunnels.
  • Drive any agent the same way — cli-agent (claude, codex, omp, …), acp-agent (Agent Client Protocol) or exec; batch, interactive pty or resident ACP sessions; resume, failover to another agent, per-job model and budget limits.
  • Orchestrate multi-step work — plans with todo chains and dependencies, workflows with fan-out and multi-agent comparison, cron schedules and job wakeups.
  • Keep a human in charge — verify steps, acceptance criteria, change-scope checks, needs_review with accept/reject, an approval gate for ACP tools, terminal session relay to the web and phone, and a decision-centric "Today" page.
  • Shared context for agent collaboration — repository-local issues and memories, session primes and handoff briefs, knowledge capture from delivered jobs, work items and an optional steward agent.
  • Observe and audit everything — event timelines, diffs and commits, usage and cost, dashboards, IM/webhook notifications, per-job credentials and redaction tools.

A gofer is "the one who runs errands": hand a task to an agent, run it in the target project, bring back logs and results. The gofer / gopher pun is intentional.

Contents

Why gofer

Running coding agents for real work quickly runs into the same problems:

Problem What gofer does
The agent you want lives on another machine (host vs. container, Windows vs. Linux, a GPU box) One server, many workers; submit from anywhere and the job runs where the project and the agent are
Agent runs disappear into terminal scrollback Every run is a job with status, logs, diff, commits, usage and an event timeline, kept in SQLite
"The agent says it is done" is not acceptance Verify commands, acceptance criteria, scope checks and a needs_review gate that only a person can accept
Parallel agents trample one checkout Directory locks, --worktree isolation and explicit merge back
Long tasks need several steps and several agents Plans with dependent todos, workflows with fan-out / pick, schedules and wakeups
You walk away and the session stalls waiting for you Session relay, web push and the "Today" decision queue let you answer from a browser or phone
Every new agent session starts from zero Repository tracker: issues, memories, repo prime, issue brief / plan brief, knowledge candidates

Architecture

 clients                         control plane                      execution
┌──────────────────┐        ┌──────────────────────────┐      ┌──────────────────────────┐
│ CLI   gofer …    │─HTTP──▶│ gofer serve              │─────▶│ server (built-in runner) │──▶ agents
│ MCP   gofer mcp  │        │  /v1 API · web console   │      ├──────────────────────────┤    cli-agent: claude, codex, omp…
│ Web   console    │        │  projects · agents       │◀─WS─▶│ worker  (remote, dials in)│──▶ acp-agent: *-acp
│ hooks claude/    │        │  jobs · plans · workflows│      ├──────────────────────────┤    exec: any argv
│   codex/omp/…    │        │  sessions · tracker      │─HTTP▶│ peer-http (another gofer) │
└──────────────────┘        │  SQLite + result dirs    │      └──────────────────────────┘
                            └──────────────────────────┘
 Authorization: Bearer <token> on /v1/*      logs, status, interactions and outcomes are mirrored back to the server
  • server (gofer serve): the single source of truth — project registry and admission rules, job store, scheduler, web console, MCP/HTTP API. One server per machine.
  • workers (gofer worker): remote executors that dial into the server over WebSocket, report which agents and directories they have, and run jobs locally. In POLICY mode the server pushes the project set; the worker only maps path prefixes (roots) and may tighten guards.
  • agents: the programs that do the work. gofer does not embed a model; it launches and supervises existing CLIs.
  • clients: anything that submits or observes work — the CLI (also in client-only mode inside containers), MCP clients, the browser, and agent hooks that register terminal sessions.

A fuller concept map (in Chinese) is in docs/architecture-overview.md.

Install

Go 1.25+; Node.js and pnpm only if you build the web console.

make web build          # build the web console, embed it, build dist/gofer (compressed with upx)
make install            # the same, then copy the binary to $GOPATH/bin
go build -o dist/gofer ./cmd/gofer   # API/CLI only; the console shows a placeholder page
make build-all          # cross-compile linux / darwin / windows × amd64 / arm64

Quick start

1. Server (the machine that owns your projects):

gofer init server --global          # writes <config-dir>/config.yaml (default ~/.config/gofer)
$EDITOR ~/.config/gofer/config.yaml # review it and drop the sample projects you do not need
export GOFER_TOKEN=change-me        # the example config reads the bearer token from GOFER_TOKEN
gofer project add demo --host-path /abs/path/to/demo \
  --default-agent codex --allow-agent codex --allow-agent claude --allow-agent exec \
  --allow-runner server --allow-exec
gofer config validate
gofer serve                         # or: gofer serve -d (background), gofer serve register (managed service)

Open http://<server>:8765/ and paste the token to use the web console.

2. Client (a container or another machine that only submits work — no YAML needed):

gofer init client                   # writes <config-dir>/.env with GOFER_SERVER_ADDR / GOFER_SERVER_TOKEN / GOFER_RUN_MODE=client
gofer project list                  # in client mode this lists the server's projects

3. Worker (optional, a machine that should execute jobs):

# on the server (admin token): register the worker and print its one-time token
gofer worker add w-01 --project demo
# on the worker machine: write worker.yaml + .env, infer roots, probe agents and run the doctor
gofer worker init --server http://<server>:8765 --id w-01 --token <one-time-token>
gofer worker -d

4. First jobs:

gofer job run -p demo -a exec --sync -- go version                      # a command; --sync waits for the result
gofer job run -p demo -a codex --prompt "Summarise the failing tests" --wait
gofer job run -p demo -a claude --runner w-01 --worktree --review --prompt "Fix issue X"
gofer job list
gofer job watch <id>                                                     # live status + logs
gofer job logs <id> --stderr --tail -n 50
gofer job review <id>                                                    # acceptance material on one screen
gofer job accept <id>                                                    # or: gofer job reject <id> --note "…" [--resume]

5. Optional integrations:

gofer init hooks --agent all --global   # register Claude Code / Codex / omp / jcode sessions (session relay + memory prime)
gofer init skill --global               # install the gofer-usage skill for agents

Core concepts

Concept Meaning
project A registered directory work can run in: host_path (and optional container_path), allowed agents and runners, allow_exec, allow_interactive, concurrency and timeout limits, default verify step, review and scope policies. A built-in default project points at the default workspace (~/.gofer/workspace or GOFER_WORKSPACE) when none is declared.
agent How to run: cli-agent (an argv template with {{prompt}}, {{cwd}}, … for batch and optional interactive_args for pty), acp-agent (an ACP server over stdio), or exec (the request's argv verbatim). Built-in templates are injected for CLIs found on PATH.
runner Where to run: server (the built-in runner on the server host; local is the canonical stored name), a worker, or a peer-http gofer.
job One unit of work: project + agent + prompt or argv + cwd. Lifecycle queued → running → done / failed / cancelled / timeout, plus waiting_dir, pending_interaction, awaiting_input, recovering, needs_review → rejected. Results live in the project's tmp/gofer/<job-id>/ and the database.
workflow A chain of steps (gofer workflow run file.yaml), with ${steps.N.*} references, retries, fan-out/join, sub-workflows and built-in templates (compare, plan-implement, review-committee).
plan / todo A plan groups jobs; todos are its checklist. A todo with an assignee and ready status dispatches itself; --after chains todos and gofer plan run drives the chain.
session An agent conversation: a resident ACP job (job run --session, job say, job end), a pty job, or a terminal session registered through hooks (relay, wake-up, nudges).
work item One card per thing you are doing across sessions (gofer work), with status, reminders, a daily digest and an optional steward.
tracker .gofer/tracker/ in a repository: issues and memories as JSONL committed with the code, mirrored to the server, injected into new sessions by gofer repo prime.

Feature overview

The full user-facing reference is the gofer-usage skill (Chinese) and its command reference; gofer <command> -h is authoritative for flags.

Jobs
  • Submit by CLI flags, a markdown task file with YAML front matter (-f task.md), or a server-rendered task-book template (-t <name> --var k=v, gofer template ls|show).
  • Sync or async (--sync, --wait), --read-only, --model, --max-tokens / --max-cost / --max-turns, --timeout, --retry, --fallback, --env, --upload / --collect.
  • Isolation: same-directory locks (--lock, --shared-dir, --exclusive-dir, --lock-wait), managed worktrees (--worktree, gofer job worktree ls|merge|rm).
  • Continuation: job resume (same agent session, --mode, --agent within a session family), job rerun, --from-session, automatic resume of transient provider errors, failover to fallback agents.
  • Interactive: --interactive pty jobs with browser attach; resident ACP sessions with --session.
  • Wakeups: gofer job wakeup create resumes a finished job on a timer or an event.
Review and quality gates
  • --verify '<cmd>' runs a check on the executing machine after the agent; --review parks the job in needs_review; only a person can job accept.
  • --hold [--hold-reason "…"] parks a job in awaiting_approval before it runs — for an outward or irreversible step (such as git push) an agent's own permissions stop. A person approves it with one tap on the job page (phone-friendly) or gofer job approve <id>; reject or expiry cancels it unrun. Agents never approve their own holds.
  • --acceptance criteria and --scope change globs flow into the prompt and the review panel; out-of-scope findings become gofer job findings [--create-issues].
  • Uncommitted-change guard (on_uncommitted), approval gate for ACP tool calls (project approval), mandatory rules (gofer agent rule) and skill bindings (gofer agent skill).
Orchestration
  • Plans and todos: gofer plan create|add-todo|set-todo|run|pause|resume|dispatch|import, plan handoff notes, decisions (plan ask, MCP gofer_ask_human), board view on the web.
  • Workflows: gofer workflow run|show|pick|template, multi-agent compare with pick-and-merge.
  • Schedules: gofer schedule add|run|enable|disable with cron or one-off timing and optional webhook triggers.
  • Comments with @agent mentions that dispatch a job, and optional leader rounds per plan.
Sessions and the human in the loop
  • Terminal session relay: after gofer init hooks, a stopped Claude Code / Codex / omp session can wait for a reply from the web (gofer session relay auto|on|off, session say), be woken up again (session resume) or nudged (session nudge).
  • Claude Code permission prompts mirrored to the web; ACP and pty sessions in the Workbench; PWA with Web Push over the optional HTTPS listener (server.tls, gofer tool cert).
  • "Today" home page: one queue of decisions waiting for you (interactions, plan decisions, reviews, work items), parallel lanes, snooze and focus mode.
  • Work items and steward: gofer work … tracks what you are doing across sessions; the optional steward (gofer steward …) tidies them with a restricted credential.
Repository tracker and agent memory
  • gofer repo init|status|prime|sync|migrate, gofer issue …, gofer memory … — issues and memories in .gofer/tracker/*.jsonl, plus global and per-project memories on the server.
  • repo prime (installed as a SessionStart hook) gives a new session the current focus, open issues, rules and a memory index; gofer issue brief / gofer plan brief hand over a task in one command.
  • memory flag reports stale memories, memory doctor checks them, memory candidates|accept|reject turns reusable lessons from delivered jobs into memories.
Workers, networking and operations
  • Workers: gofer worker add|init|doctor|show|projects|reload|upgrade|remove, LEGACY and POLICY configuration, reconnect recovery.
  • Tunnels: gofer tunnel forward|check|ls|save|stop forwards TCP/UDP through a worker under its allowlist; presets are stored on the server and can be hosted by it.
  • Files: gofer tool cp <src> <runner>:<project>/<path> and gofer tool xfer.
  • Managed server: gofer serve register|start|stop|restart|status|logs|upgrade|uninstall (Windows logon task or Linux systemd unit), gofer serve reload for hot config reload.
Observability and security
  • Event timeline, diff and commits, usage and cost per job, the Dashboard (/dashboard), Prometheus /metrics, JSONL file logs with rotation and redaction.
  • Notifications through webhooks and DingTalk / Feishu adapters (server.notification).
  • Per-job scoped credentials, caller tokens with optional capabilities, gofer job redact, job delete, job secret-scan.
Entry points
  • CLI — commands grouped by gofer -h.

  • HTTP — /v1/* with Authorization: Bearer <token>; /health and the Prometheus /metrics endpoint sit outside it (/metrics can take its own token).

  • MCP — gofer mcp is a stdio MCP server that forwards to the server at GOFER_SERVER_ADDR (--standalone runs in-process, --project scopes it):

    { "mcpServers": { "gofer": { "command": "/abs/path/to/gofer", "args": ["mcp"] } } }
    
  • Web console — embedded in gofer serve (disable with --no-web): Today, Dashboard, Workbench, Board, Review, Plans, Work, Sessions, Issues, Workflows, Schedules, Agents, Runners, Projects and Settings.

Configuration

Config lookup: -c/--config → GOFER_CONFIG → ./.gofer.local.yaml / ./.gofer.yaml → <config-dir>/config.yaml (<config-dir> defaults to ~/.config/gofer, override with GOFER_CONFIG_DIR). A project directory may carry a thin .gofer.project.yaml with preferences only. <config-dir>/.env and ./.env are loaded automatically; never commit real tokens.

GOFER_RUN_MODE Local config Purpose
server (default) the lookup chain above gofer serve, local administration
worker <config-dir>/worker.yaml connect to a server and execute dispatched jobs
client only <config-dir>/.env submit and observe; project and agent commands read the server
  • Examples: config/gofer.example.yaml and config/worker.example.yaml.
  • References: server · worker · client · setup recipes.
  • Inspect and check: gofer config info, gofer config show <project>, gofer config validate [server|worker], gofer worker doctor.
  • Security baseline: the server refuses to start without a token (unless --allow-empty-token); listen on 127.0.0.1 when you do not need remote access; exec jobs need the project's allow_exec; argv is never passed through a shell; a job's cwd is confined to its project.

Documentation

Where What
skills/gofer-usage/ User and agent guide, kept in sync with every user-visible change
docs/runbook/ Operating guides: session relay, container worker, tunnels, HTTPS/PWA, Web Push, IM notifications, managed server, worktrees, retries…
docs/reference/ HTTP API endpoint overview and web console details (Workbench layout, shortcuts, live push)
docs/design/ Design records for each feature
docs/gofer-enhancements-roadmap.md Roadmap: landed features by id, next candidates (history)
docs/examples/templates/ Example task-book templates (language-neutral; adapt per project)

Most design documents and runbooks are written in Chinese.

Development (for gofer contributors)

go build ./... && go vet ./...
go test ./...                                   # full suite; use -race -count=1 for the release check
cd web && npx vue-tsc --noEmit && npx vitest run && npx vite build
GOOS=darwin go vet ./...                        # after touching platform-specific code
  • Project rules (layering, CLI conventions, compatibility policy, shared utilities) are in AGENTS.md. In short: entry layers (commands, httpapi, mcpserver) only bind and forward; dependencies point one way; new small utilities go under gofer tool; temporary compatibility code carries a DEPRECATED(vX): remove in vY marker.
  • A user-visible change updates skills/gofer-usage/ in the same change set, and gets a line in CHANGELOG.md under "未发布" (unreleased).
  • Parallel worktrees, design-doc naming and the release flow follow the repository conventions in AGENTS.md.

Changelog

See CHANGELOG.md (in Chinese): one entry per release since v0.100.0, earlier history condensed by milestone.

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.
answerguard
Package answerguard is the派生作答白名单闸 (监督分层升级路由 P3.1, design §8.5/§10).
Package answerguard is the派生作答白名单闸 (监督分层升级路由 P3.1, design §8.5/§10).
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.
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
Package config defines the gofer configuration model and the loader/writer that resolve, decode, default and persist it.
Package config defines the gofer configuration model and the loader/writer that resolve, decode, default and persist it.
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.
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
Package httpapi exposes the gofer control plane over HTTP using github.com/gookit/rux/v2.
Package httpapi exposes the gofer control plane over HTTP using github.com/gookit/rux/v2.
job
Package job is the async job state machine: it accepts a JobRequest, resolves the agent+cwd, runs it on a runner in a background goroutine, streams logs to the store and tracks status/timeout/cancel.
Package job is the async job state machine: it accepts a JobRequest, resolves the agent+cwd, runs it on a runner in a background goroutine, streams logs to the store and tracks status/timeout/cancel.
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.
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).
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).
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).
presence
Package presence is the business layer for E36 driver-agent identity/mailbox (design §6.2/§9).
Package presence is the business layer for E36 driver-agent identity/mailbox (design §6.2/§9).
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.
pty
Package pty is the platform-neutral pty (pseudo terminal) backend for interactive jobs (WEB-03 design §6, §13).
Package pty is the platform-neutral pty (pseudo terminal) backend for interactive jobs (WEB-03 design §6, §13).
pty/conpty
Package conpty is the vendored Windows ConPTY backend (see conpty.go, which carries the //go:build windows constraint).
Package conpty is the vendored Windows ConPTY backend (see conpty.go, which carries the //go:build windows constraint).
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).
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.
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.
supervisor
Package supervisor is the E25 layered answerer (design §8.3-8.4).
Package supervisor is the E25 layered answerer (design §8.3-8.4).
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/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.
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.
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).
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.
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