Skip to content

Architecture ​

eyeful is a review workflow and the two programs that run it on a user's machine: the eyeful command and the desktop app. Neither needs a server. The cloud action is another program, cmd/eyeful-action with its packages in internal/, run in a GitHub Actions job. It shares the workflow module and local, and exchanges no data with the local side. local/app stays with the CLI and the desktop.

Components ​

The desktop app and the CLI both call local/app, which reads the change with local/subject, checks out the snapshot with local/worktree and runs workflow through local/agents (Running locally). local/app wires plain constructors.

The review workflow ​

workflow runs one review through the stages. It runs no agent, command or storage itself: the caller passes four interfaces in a Session.

InterfaceProvidesCloudLocal
AgentsOne call per role, returning a typed result and the tokens spentlocal/agents: pi in the review container, named by EYEFUL_AGENTlocal/agents
ClassifierThe probability that two findings are one problem, and the tokens spentlocal/classify, on TypeSafe's APIlocal/classify, on TypeSafe's API
WorkspaceThe CI check, setup, reading a file, test runs on a fresh copyGitHub Actions for the CI check; internal/sandbox for the restlocal/worktree
ArchiveLoading and saving each stage's outputlocal/archive, for the length of the joblocal/archive

Go owns every loop: workflow checks each plan and report, keeps the budget, decides retries, and saves each stage before the next starts. It has no fx, database or server types.

Jev ​

Jev is TypeSafe's classifier, called on TypeSafe's API through go-jev: it answers a typed question about the state it is given with a probability, and writes no text. eyeful gives it a judgement only when everything the judgement needs fits in that state.

WhereJev is askedThrough
workflow, before verificationWhether two findings on the same lines are one problemClassifier.Same, with go-jev's types

Languages ​

  • Go: the action, the CLI and the workflow.
  • TypeScript: the desktop frontend.
  • Python: the evaluation only.

eyeful has no agent loop of its own. Agents run in pi in the cloud and in the user's coding agent CLIs locally.

Layout ​

Modules ​

Each part is its own Go module, so the compiler enforces the boundary. The root module holds both programs; a depguard rule in .golangci.yml keeps cmd/eyeful off internal/.

ModuleHoldsMay import
workflowOrchestration and its interfacesnothing here
localWhat the CLI and the desktop shareworkflow
rootcmd/eyeful, the local CLIworkflow, local
cmd/eyeful-action, internal/workflow, local
apps/desktopThe desktop app; Wails and cgo stay hereworkflow, local

Directories ​

PathOwns
cmd/eyefulThe local CLI (kong): review, provider, connect, commit
apps/desktopThe local GUI: Wails v3, its own Go module
apps/desktop/frontendThe desktop's SvelteKit frontend and its Wails bindings
packages/uiThe desktop's components: diff view, file tree, theme
packages/pullsBuilds workflow/pulls/core.js from @pulls.review/core
workflowReview orchestration: triage, plan check, experts, verifier, summary, budget, checkpoints
workflow/promptsExpert and role prompts, vendored skills
workflow/pulls@pulls.review/core as core.js, run with moejs
workflow/projectThe project's commands, found from its manifests
workflow/reportA result as Markdown and SARIF 2.1.0
local/subjectThe snapshot of a local branch, commit or uncommitted changes
local/appThe local composition root; the only package the CLI and desktop call
local/agentsworkflow.Agents over the claude, codex and pi CLIs
local/worktreeThe snapshot's disposable checkout; workflow.Workspace
local/store.eyeful/runs/ and the confirmed commands
local/settingsThe connected agent and the desktop's last repository
local/classifyworkflow.Classifier over Jev on TypeSafe's API
local/archiveStage checkpoints as files
local/git, local/tailRunning git with a fixed environment; keeping the end of an output
eval/The evaluation scripts, in Python
action.yml, cmd/eyeful-action, cmd/eyeful-sandbox, internal/The cloud action

Frontends ​

The desktop frontend calls only its own Go services through the Wails bindings. Its components live in packages/ui.

Data flow ​

Producers and consumers attach at the two ends of the pipeline and do not know about each other.

A workflow starts a review, and its job posts a COMMENT review and the ranked report. Each post carries the workflow run's id, so a re-run skips what is already there.