A local guild of adventurers
Not another omniscient chat. Staff people with names. A channel is an open contract. Need Node ≥ 22.19. Next move is npx @kevin5251984/guild web — opens http://127.0.0.1:7420, not a star. Checkout with pnpm is the alternative.
Try the hall
Click @pm — only PM answers. Click @rd — a different seat. Edit Voice, ask PM again — same person, different voice.
How the harness works
@handle → chatReply → HarnessService.turn → runAgentLoop
That text is the answer. The loop stops.
gateTool → Promise.all → append results → ask again. Bounded. At the bound it asks for a final answer.
steer reaches the model next round as <user_steer>. Stop aborts the turn AbortSignal. Skill catalog is a name + summary; the body loads only when the model calls skill.
Guild borrowed one Hermes shape for the browser snapshot — never the live Chrome profile. The turn loop is Guild’s own. Not a Codex app-server harness. Not an OS jail. Default sandbox is full_access.
Files: packages/daemon/src/harness.ts · generate.ts · tools.ts · browser.ts.
What runs locally
Node ≥ 22.19. One line, no clone. The hall is http://127.0.0.1:7420.
npx @kevin5251984/guild web # http://127.0.0.1:7420 # checkout instead — pnpm 10.x pnpm i pnpm test pnpm dev
| Limit | Fact |
|---|---|
run / write | Your shell. Unset GUILD_SANDBOX = full_access. |
| MCP | Host Claude / Cursor / Codex stdio is live with no import step. |
| Browser | Snapshots last_used Chrome into ~/.guild/browser-profile/chrome. Set GUILD_BROWSER_REAL_PROFILE=0 for empty. |
Read SECURITY.md before you point this at a machine you care about.