Files
executus/README.md
T
steve ca243a2d50
executus CI / test (push) Failing after 24s
P0: stand up executus harness module above majordomo
Batteries-included agent-harness base, extracted from mort's agent layer.
This first cut establishes the module + the zero-coupling core primitives:

- lane, dispatchguard, pendingattach, run/progress.go: moved verbatim from mort
- config: host config Source seam + env-var default (nil-safe helpers)
- deliver: output-egress seam + Discard/Stdout defaults
- identity: AdminPolicy + MemberResolver seams (nil-safe)
- fanout: programmatic N×M swarm (bounded global + per-key concurrency)
- README/CLAUDE.md with the vibe-coded banner; CI with Go gates +
  the "core stays majordomo+stdlib only" invariant

Core builds with stdlib only today; majordomo enters at P1 (model/structured).
go build/vet/test -race all green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-26 19:18:37 -04:00

62 lines
2.8 KiB
Markdown
Raw 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 (P0):**
- `lane/` — bounded worker pool with fair-share queueing (run- and
provider-concurrency).
- `fanout/` — programmatic N×M swarm with bounded global + per-key concurrency.
- `config/` — the host config seam (`Source`) with an env-var default.
- `deliver/` — the output-egress seam with `Discard`/`Stdout` defaults.
- `identity/` — caller-identity seams (`AdminPolicy`, `MemberResolver`).
- `dispatchguard/`, `pendingattach/`, `run/progress.go` — run-safety primitives.
## 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.