Fork of BinaryBourbon/guild based at commit b25f53f
  • Elixir 81.3%
  • CSS 14%
  • HTML 4.4%
  • Dockerfile 0.2%
  • JavaScript 0.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Jake Gaylor 56f1b89c45
fix(inbox): tolerate markdown code fences + prose around classifier JSON
Gemini Flash (and other models) sometimes ignore the "no markdown" instruction
in the classifier prompt and wrap their response in \`\`\`json … \`\`\` fences.
The strict Jason.decode then fails and the row gets recorded as a generic
non-JSON error — even though the underlying classification was perfectly valid.

extract_json/1 strips fences, accepts bare JSON unchanged, and falls back to
the first {…} block in prose for the worst-case "Sure! Here's the result: {…}"
preamble pattern. Tests cover all three.

Doesn't help when the model returns truly malformed JSON — that still ends up
as :noise with a recorded reasoning so the operator can see what happened.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-31 22:08:40 -04:00
.claude docs(.claude/goal): driver prompt for fresh sessions 2026-05-18 21:59:57 -04:00
.github/workflows chore: placeholder Dockerfile + k8s manifests for deploy pipeline 2026-05-18 20:23:20 -04:00
agents fix(agent): bind guild-implementer to guild-worker env (#10) 2026-05-19 15:14:31 -04:00
config feat(g10/s2): classifier with dry-run (SlackInboxWorker + OpenRouter) (#66) 2026-05-30 23:42:22 -04:00
decisions adr(0017): Accepted — gate for G10 Slice 2 2026-05-30 23:17:45 -04:00
discovery discovery: phase-0 wedge framing (#1) 2026-05-18 22:28:34 -04:00
docs feat(inbox): record rate-limit skips + tunable window (default 5s) 2026-05-31 16:52:42 -04:00
k8s feat(g10/s2): classifier with dry-run (SlackInboxWorker + OpenRouter) (#66) 2026-05-30 23:42:22 -04:00
lib fix(inbox): tolerate markdown code fences + prose around classifier JSON 2026-05-31 22:08:40 -04:00
plan plan(g10/s3+s4): implementer briefs for actions + admin review surface 2026-05-31 03:47:48 +00:00
priv feat(inbox): record per-classification cost + tokens + model 2026-05-31 17:20:07 -04:00
test fix(inbox): tolerate markdown code fences + prose around classifier JSON 2026-05-31 22:08:40 -04:00
.formatter.exs feat(g2-slice-1): Phoenix scaffold + Ecto + all five schemas (#6) 2026-05-19 01:05:48 -04:00
.gitignore feat: G3 slice 1 — webhook ingestion + k8s secrets (#20) 2026-05-24 06:56:21 -04:00
CHANGELOG.md docs: add CHANGELOG.md (Keep a Changelog format) (#35) 2026-05-29 07:45:15 -04:00
CONTRIBUTING.md docs: add CONTRIBUTING.md (#14) 2026-05-19 17:56:06 -04:00
Dockerfile G6 Slice 1 — Polish foundations (Linear :executing, Pass D terminated, state_entered_at, OTP bump) (#45) 2026-05-29 21:25:48 -04:00
LICENSE Add MIT LICENSE file (#25) 2026-05-24 08:52:00 -04:00
mix.exs G5 Slice 1 — Oban Web + thread timeline (#38) 2026-05-29 10:34:44 -04:00
mix.lock G5 Slice 1 — Oban Web + thread timeline (#38) 2026-05-29 10:34:44 -04:00
OPERATING_MODEL.md docs(operating-model): orchestrator never auto-merges 2026-05-18 21:54:40 -04:00
PREREQUISITES.md chore: seed captain-picard bus-repo scaffolding 2026-05-17 22:21:26 -04:00
README.md G7 Slice 3 — Demo runbook + onboarding refresh (#52) 2026-05-30 01:23:16 -04:00
ROADMAP.md docs(g10): inbox activation runbook + ROADMAP slice 1–4 close 2026-05-31 00:02:19 -04:00

Guild

Guild is a platform for building autonomous workers that participate in the software development lifecycle.

Try It on Your Repo

Guild self-hosts on your own infrastructure — no data leaves your environment.

  • Full setup guide: follow docs/setup.md to go from a fresh fork to a running Guild instance in about 30 minutes (GitHub App, Kubernetes deploy, first bot-ready cycle verified).
  • Live demo walkthrough: docs/demo.md has a 5-minute operator script and a 15-minute deep dive you can run against any configured repo.
  • Add more repos: after the initial deploy, register additional repositories with docs/add-repo.md — no redeployment required.
  • Slack and Linear are optional: Guild starts cleanly without them; set SLACK_BOT_TOKEN / LINEAR_API_KEY when you're ready to enable those integrations.

The Premise

Most AI coding tools today are trigger systems — an event arrives, a job runs, it's done. The bot has no memory of yesterday, no awareness of the related PR that's failing, no way to respond when you ask it to hold off in Slack.

Guild is built around a different premise: software development as something that autonomous workers can genuinely participate in. Workers that have persistent awareness of what's happening, exercise judgment about when and how to act, and communicate through the same channels humans use — GitHub, Slack, PR comments.

Define your workers. Guild handles the rest.

Workers

A worker is a user-defined autonomous agent that runs on the Guild platform. Teams typically run several workers with different roles — one that triages incoming issues, one that implements bot-ready tickets, one that responds to review feedback, one that watches CI failures. They share platform infrastructure but have independent identities, decision logic, and scopes.

Guild does not prescribe what a worker does or how it reasons. It provides the plumbing — events, memory, context, actions, state — and workers define their own behavior on top of it.

Architecture

Guild is built on eight components:

# Component What it does
1 Normalized Event Stream Unified envelope for events from all sources
2 Thread Model Connects related events into coherent units of work
3 Context Assembly Builds the full picture before any decision is made
4 Decision Layer Interface workers implement to receive context and return actions
5 Action Primitives The concrete things workers can do in the world
6 State Machine Tracks where a worker is with each piece of work
7 Social Presence Per-worker identity across GitHub and Slack
8 Work Claiming Proactive initiative — workers picking up work unprompted

What Makes This Different From a Trigger System

Three things separate autonomous workers from bots that fire and forget:

Memory across events. A PR opened, a review requested, a Slack message asking for an update, a merge — these are all the same thread of work. Guild connects them over time so every decision a worker makes is informed by what came before.

Initiative, not just reaction. Workers can browse available work, decide something is in scope, claim it, and start — without being explicitly triggered.

Social presence. Workers communicate through the same channels humans do. They announce what they're picking up, ask questions when requirements are unclear, and follow up. They feel like team members because they behave like them.