Files
executus/README.md
T
steve ea9475da54
executus CI / test (pull_request) Failing after 1m5s
Adversarial Review (Gadfly) / review (pull_request) Successful in 8m18s
P5: light-tier canary — gadfly-shaped reviewer on executus core
examples/reviewer proves the core is sufficient for a static-binary light host
(gadfly's shape) with NO batteries:
- config.Env + model.Configure  -> env-driven model fleet + tier overrides
- model.ParseModelForContext    -> tier resolution + failover
- fanout.Run (PerKey caps)      -> N models x M lenses swarm, per-provider bound
- model.GenerateWith[T]         -> structured findings per (model, lens) cell
- Consolidate                   -> one verdict-led report section per model

Hermetic test runs the full 2x3 swarm against majordomo's fake provider and
asserts the consolidated verdicts. A go list -deps CI check asserts the canary
imports ZERO batteries (the light-tier invariant) — gadfly's go.sum stays free
of gorm/redis/discordgo/sqlite. README + docs updated.

This is the canary; migrating the LIVE gadfly repo onto executus core is a
follow-up (kept separate to not destabilize the active reviewer).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-27 00:22:02 -04:00

73 lines
3.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# executus
> ⚠️ **This project is vibe-coded.**
> executus is written almost entirely by an AI coding agent (Claude), with a
> human steering at the design and review level rather than typing the code.
> That's a deliberate choice, stated up front — the same way [gadfly] is. Read
> the code before you depend on it, pin a version, and file issues if something
> looks off. It is offered as-is.
[gadfly]: https://gitea.stevedudenhoeffer.com/steve/gadfly
A **batteries-included base for building LLM agent harnesses in Go.** Import it,
do a little wiring, and you have agentic capabilities: a bounded run loop, a tool
registry with a suite of common tools, context compaction, config-driven model
tiering and failover, structured output, and parallel fan-out — with sensible
defaults so a brand-new project is agentic with almost no setup, and pluggable
seams so a serious host can swap in its own storage, config, delivery, and tools.
executus sits **strictly above** [majordomo] — the lean LLM substrate (agent
loop, canonical `llm` types, providers, media normalization, model parsing /
failover / tiering). majordomo stays the substrate; executus is the opinionated,
batteries-included layer on top. executus requires **no changes to majordomo**.
[majordomo]: https://gitea.stevedudenhoeffer.com/steve/majordomo
## Status
Early. Being extracted, phase by phase, from the agent layer of [mort] (a Discord
bot) — mort and gadfly are the first two consumers (heavy and light). See
`CLAUDE.md` for the architecture and the extraction roadmap (P0P6).
[mort]: https://gitea.stevedudenhoeffer.com/steve/mort
**Available today:**
- `run/`**executus is runnable.** `run.Executor` ties model resolution, the
tool registry, majordomo's agent loop, context compaction, run-bounding, and
step/audit instrumentation into one `Run(ctx, RunnableAgent, inv) Result`, with
every host concern behind a nil-safe `run.Ports` (Audit/Budget/Critic/
Checkpointer/PaletteSource/Delivery). See `examples/minimal`.
- `model/` — config-driven tier resolution + failover over majordomo, with
pluggable `UsageSink`/`TraceSink` and `GenerateWith[T]` structured output.
- `tool/` — the tool registry + 3-stage permission model + SSRF guard.
- `compact/` — the per-run context compactor.
- `lane/` — bounded worker pool with fair-share queueing (run- and
provider-concurrency).
- `fanout/` — programmatic N×M swarm with bounded global + per-key concurrency.
- `config/`, `deliver/`, `identity/` — host seams (config / output / identity),
each with a shipped default.
- `dispatchguard/`, `pendingattach/` — run-safety primitives.
- `examples/reviewer` — a **gadfly-shaped PR reviewer on the core only** (env-config
model fleet → `fanout` N×M swarm → `model.GenerateWith[T]` structured findings →
consolidation), the light-tier canary; CI asserts it pulls in no battery.
## Design
Two tiers in one module (`go.mod` = majordomo + stdlib only):
- **Core** — everything a light host needs to be agentic: run loop, tool
registry + common tools, model resolution, compaction, lanes, fan-out,
structured output. No persistence, no scheduling.
- **Batteries** (opt-in sibling packages) — persona/agent nouns, saved skills,
audit, run-critic, scheduling, budgets, checkpointing. Each is nil-safe and
ships a default, so you add only what you use.
Persistence that needs a real database lives in a **separate** nested module
(`contrib/store`, pure-Go SQLite) so the core never drags in a DB driver — a
static-binary host (gadfly) stays static.
## License
TBD.