Doramagic Project Pack · Human Manual
verel
Verified agents — nothing is "done" until a grader returns a verdict. Eyes (AgentVision) + verdict bus + compounding memory + a fleet + agent-built tooling + agent-run CI/CD.
Overview & the Five-Organ Architecture
Related topics: Verdict Bus, Graders & Self-Healing CI, Brain, Scope Lattice & Shared Verified Memory, Fleet, Tool-smith, Surfaces & Operations
Continue reading this section for the full explanation and source context.
Related Pages
Related topics: Verdict Bus, Graders & Self-Healing CI, Brain, Scope Lattice & Shared Verified Memory, Fleet, Tool-smith, Surfaces & Operations
Overview & the Multi-Organ Architecture
Purpose and Thesis
Verel is an agent framework positioned as a verification substrate — a layer any agent can call (locally or over MCP) so that work is treated as a *hypothesis* until a grader returns a verdict. The single load-bearing idea, lifted from the project README, is that an agent's output is never trusted by default: it must be reduced to a unified pass / warn / fail before it is allowed to compound into long-term memory.
*"an agent's output is a hypothesis until a grader returns a verdict. Verel unifies every check — tests, types, lint, vision, perf, security — into one pass / warn / fail, and only verified work is allowed to compound into memory."*
Source: src/verel/README.md:1-15
This shape was hardened in v0.30.0 (the verification substrate release) and extended in v0.31.0 (the shared verified brain) so that any agent over MCP can recall, remember, and verify against the same trust substrate. Source: v0.31.0 release notes.
The Organ Map
The package is divided into specialized modules ("organs") that each speak the verdict contract. The canonical list, taken from the module guide, is:
| Organ | Package | Import surface | Role |
|---|---|---|---|
| ⚖️ Verdict bus | verel.verdict | gate, Report, Issue | Unified eval contract every sense speaks |
| 👁️ Eyes / senses | verel.senses | perceive, watch | AgentVision as a grounded perception sense (extra verel[sight]) |
| 🧠 Brain | verel.memory | LocalMemory, consolidate_failures | Trust layer — only verified facts/skills compound |
| 🚁 Fleet | verel.fleet | Scheduler, Task | Agents managing agents, every node gated by the bus |
| 🔧 Tool-smith | verel.toolsmith | ToolSmith, run_container | Agents build + sandbox their own tools |
| ♻️ Agent-run CI/CD | verel.ci | run_stage, self_heal | Tests/lint/types/perf/security as graders, self-healing |
| 📦 Skill registry | verel.registry | PublicRegistry, import_skill | Publish/fetch signed skills — trust does not travel |
Source: src/verel/README.md:17-39
Note on terminology: the module README labels this table *"The six organs at a glance"*, but the table itself lists seven rows. The page preserves the source's actual surface so newcomers can map tasks to packages.
The Verdict Bus — the Central Contract
Every other organ — eyes, brain, fleet, tool-smith, CI, registry — produces a Report and asks gate() to reduce a set of reports to one verdict. The models that flow on that bus live in verel.verdict.models:
Report— one grader's evaluation, carrying aVerdict(PASS/WARN/FAIL), aGraderKind, a summary, and a list ofIssues.Issue— typed finding withkind,severity,source(the originating grader), an optionallocator, and a NIRVANA-computedfingerprintthat the bus assigns after construction.Gate— the reducer, which collapses a list ofReports under a few non-negotiable rules.
Source: src/verel/verdict/models.py:1-60
The bus is intentionally thin: it does not know about perception, memory, or CI — it only knows how to *combine verdicts*. This is what lets a CI stage and a vision saccade and a remote brain attestation all land on the same Verdict and be reasoned about uniformly.
The Memory / Brain Layer
The brain is the trust substrate. Its public surface is re-exported from verel.memory.__init__, including the four-tier trust model (MemoryRecord, Trust, MemoryView, LocalMemory), the embedding shims (Embedder, HashEmbedder, OpenAIEmbedder), the consolidation and revision passes, the failure ledger, the held-out promotion gate, and the HA surface (ReplicatedMemory, AntiEntropy). Source: src/verel/memory/__init__.py:1-30
Three behaviors distinguish verel's brain from a plain vector store:
- Interference rule. A write with the same
(subject, predicate, scope)key supersedes the prior record rather than duplicating it; identical text *corroborates* (raises confidence andsupport_count, resetsretrieval_strength). Source: src/verel/memory/local.py:1-40 - Two-layer consolidation. Failures are clustered (semantically when an embedder is present, otherwise by the coarse
detail['kind']) and lifted into structuredDESIGN_RULEs, then clustered again intoSCHEMAprinciples. Both layers writetrust=candidate— trust is never auto-verified. Source: src/verel/memory/consolidate.py:1-30 - Contradiction-driven revision. When a rule accumulates counterexamples, the rule is *weakened*, *split* into a narrowed general rule plus an exception, or *rejected* — never auto-verified. Source: src/verel/memory/revise.py:1-20
These three rules are the substrate's way of enforcing the "trust does not travel" property called out in v0.30.0. The release-notes progression v0.31.0 → v0.32.0 → v0.34.0 layers remote-brain access, ed25519 authenticated principals, and fact-bound cross-principal attestation on top of the same in-process trust model.
The Agent, Senses, CI, and Tool-Smith Organs
- Agents (
verel.agents) — currently the coding agent and aFixHookfactory. Source: src/verel/agents/__init__.py:1-10 - Senses (
verel.senses) —SightResultcarries oneReportper source-grader (dom/ocr/cv/vision) plus a combinedPerceptenvelope, mapped through a closed 4-value source-to-grader table. Source: src/verel/senses/sight.py:1-30 - CI / grading (
verel.ci) — re-exportsrun_stage,self_heal,HealResult, the rollback policy/decision/outcome trio, and the pre-commit installer. Source: src/verel/ci/__init__.py:1-12 The currentLANGStable grades Python (pytest+ruff+mypy), JS (jstest+eslint+tsc), and Go (gotest+govet); Rust is a tracked gap (Issue #1). Source: src/verel/ci/graders.py:1-10 - Tool-smith (
verel.toolsmith) — agents that build and sandbox their own tools, with a seccomp-bpf denylist layered on top of a bwrap container when thecontainerextra is installed. Source: src/verel/toolsmith/seccomp.py:1-25 - Registry (
verel.registry) —PublicRegistryis a content-addressed store of signedSkillArtifacts; the content hash is the namespace and a foreign-origin overwrite is refused. Source: src/verel/registry/store.py:1-25
How the Organs Compose
flowchart LR
A[Agent / FixHook<br/>verel.agents] --> R[Reports]
S[Senses / AgentVision<br/>verel.senses] --> R
C[CI Graders<br/>verel.ci] --> R
T[Tool-smith<br/>verel.toolsmith] --> R
R --> G[Verdict Bus<br/>verel.verdict.gate]
G -->|PASS / WARN / FAIL| M[Memory / Brain<br/>verel.memory]
M -->|verified facts & skills| Reg[Skill Registry<br/>verel.registry]
M -. recall / remember .-> MCP[(MCP substrate<br/>v0.35.0)]
Reg -. signed skills .-> MCP
G -. runreceipt .-> MCPReading the diagram bottom-up: every organ emits Reports; the bus gates them; only gated results compound into the brain; the brain, the registry, and the run-receipt surface are all reachable over MCP since v0.30.0, and the HTTP transports are now TLS-hardened since v0.36.0.
Common Failure Modes and Gaps
- Mis-attributed feedback in the brain. Without the corroboration/contradiction accounting in src/verel/memory/local.py, a single bad actor can poison a shared brain — the reason
AuthorTrustandimport_beliefre-verification exist on top of the local view. - Auto-verification creep. A bug elsewhere could shortcut
trust=candidatetoverified; the design rule in src/verel/memory/consolidate.py:1-30 and src/verel/memory/revise.py:1-20 is that revision only *lowers* trust or *narrows* scope. - Undetected missing extras. Issue #2 notes that
verel doctordoes not yet show which optional extras (e.g.,verel[sight],verel[container]) are installed or which provider keys are present — newcomers may installvereland assume a sense is wired when it is not. - Monorepo CI gaps. Issue #4 requests a recipe for *gating a monorepo with per-package stages*; the
LANGStable in src/verel/ci/graders.py:1-10 today keys a stage to a single language, so per-package gating is still caller-side composition. - Parser coverage. Issue #3 asks for broader grader-parser fixtures in
tests/test_ci_senses.py; the parsers in src/verel/ci/graders.py are pure functions over(stdout, stderr), so the gap is purely a test-data gap, not a design gap.
See Also
- Developer guide / cookbook — task-oriented recipes referenced by the monorepo gap (Issue #4).
- v0.36.0 release notes — TLS for routable brain/lease/registry binds — the transport layer that hardens the brain, lease, and registry services.
- v0.34.0 — cross-principal verified tier (fact-bound attestation) — the most recent addition to the trust substrate.
- Issue #1 — add Rust toolchain graders to
verel.ci.graders. - Issue #2 — extend
verel doctorto report installed extras and key presence.
Source: https://github.com/amitpatole/verel / Human Manual
Verdict Bus, Graders & Self-Healing CI
Related topics: Overview & the Five-Organ Architecture, Fleet, Tool-smith, Surfaces & Operations
Continue reading this section for the full explanation and source context.
Related Pages
Related topics: Overview & the Five-Organ Architecture, Fleet, Tool-smith, Surfaces & Operations
Verdict Bus, Graders & Self-Healing CI
Verel treats an agent's output as a *hypothesis* until a grader returns a verdict. The verdict bus is the single contract every sense (vision, tests, lint, types, security, perf) speaks, and the self-healing CI organ reuses the same contract to gate commits, merge requests, inner dev loops, and post-merge smoke runs. This page explains how the contract works, which graders ship, and how failures are classified, recorded, and replayed.
The Verdict Bus — One Contract, One Reducer
The bus is defined under src/verel/verdict/. Every grader — AgentVision, pytest, ruff, the LLM judge, a code-review skill — produces a Report carrying a Verdict (pass/warn/fail), a GraderKind, and a list of Issue objects. The reducer is gate(), exposed in src/verel/verdict/__init__.py.
gate() enforces three non-negotiable rules, all parameterised by named constants in src/verel/verdict/constants.py:
| Rule | Constant | Effect |
|---|---|---|
| Advisory ceiling | ADVISORY_CEIL = Severity.WARNING | Open-ended graders (VISION, LLM_JUDGE, ACOUSTIC, AUDIO_LLM) can never gate a CRITICAL — they are clamped to warn |
| Gating severity | GATING_SEVERITY = Severity.ERROR | Issues at/above ERROR count as gating_failures for the progress signal |
| Windowed progress | W = 4 | progressed() requires strict shrinkage of the gating-failure set over a 4-step window |
from verel.verdict import Report, Issue, IssueKind, Severity, GraderKind, Verdict, gate, assign
r = assign(Report(verdict=Verdict.FAIL, summary="2 type errors", grader=GraderKind.TYPECHECK,
issues=[Issue(kind=IssueKind.OTHER, severity=Severity.ERROR,
source=GraderKind.TYPECHECK, message="bad return",
locator="app.py:42")]))
print(gate([r], required={GraderKind.TYPECHECK}).verdict) # Verdict.FAIL
assign() lives in src/verel/verdict/fingerprint.py; it scrubs volatile fields (line numbers, addresses, floats) so the same underlying issue produces the same fingerprint across runs. The model surface (Report, Issue, RunReceipt, GateResult, and the enums Verdict / Severity / GraderKind / IssueKind) is defined in src/verel/verdict/models.py. A gate() that requires a grader also demands a signed RunReceipt — the attestation rule, issued via sign_receipt() and checked by verify_signature() in src/verel/verdict/gate.py. Without a receipt, a required grader fails closed.
Code Graders — Deterministic, Pure, Testable
src/verel/ci/graders.py defines a GraderSpec per toolchain: a frozen command, a parser, and a LangToolchain binding. Parsers are pure functions over (stdout, stderr), so the corpus in tests/test_ci_senses.py drives them offline. The command runner is injectable (subprocess_runner by default) for the same reason.
| Language | Test grader | Lint / type | Security / audit |
|---|---|---|---|
| Python | pytest_spec / parse_pytest | ruff_spec / parse_ruff, mypy_spec / parse_mypy | bandit_spec / parse_bandit |
| JS / TS | jstest_spec (TAP) / parse_tap | eslint_spec / parse_eslint, tsc_spec / parse_tsc | npm_audit_spec / parse_npm_audit |
| Go | gotest_spec / parse_go_test | govet_spec / parse_go_vet | — |
| Any | perf_spec / parse_perf | — | — |
The full list of language tags and the LANGS mapping is exported from src/verel/ci/__init__.py. Each parser emits Issue records with stable source=GraderKind.* so the fingerprint reducer does not confuse a mypy error with a ruff warning, and run_grader() signs a RunReceipt keyed on suite_sha() plus a bound_input_digest of the changed files — the same digest that the gate receipts over.
Community note: the project tracks a feature request to add a Rust toolchain (cargo test+clippy) following the existingGraderSpecpattern (issue #1), and to widen the parser corpus with real tool output (issue #3). Both are mechanical extensions of the current grader table.
Self-Healing CI — Stages, Medic, and Failure Memory
src/verel/ci/pipeline.py exposes four named stages and a single entry point, run_stage(stage, ...). Each Stage pairs a list of GraderSpecs with a required set; run_stage runs every grader, gates the resulting Reports, and consults a FailureLedger for regressions. A StageResult carries the verdict, the underlying GateResult, the raw reports, and any regressions.
flowchart LR
A[Change set] --> B[run_stage]
B --> C[run_grader ×N]
C --> D[Verdict bus: gate()]
D --> E{Required & receipted?}
E -- no --> F[FAIL: hollow gate]
E -- yes --> G[FailureLedger regression?]
G -- yes --> H[FAIL: known regression]
G -- no --> I[ci-medic classify]
I --> J[(RETRY · REGEN · QUARANTINE · FIX)]
J --> K[Verdict: PASS / WARN / FAIL]The ci-medic (src/verel/ci/medic.py) is deterministic, not LLM-driven. It pattern-matches grader output to one of four Actions:
Action | Trigger class | What happens |
|---|---|---|
RETRY | INFRA / TRANSIENT (timeouts, 5xx, connection errors) | Re-run the stage; do not "fix" |
REGEN_LOCKFILE | DEP_DRIFT (ModuleNotFound, solver errors) | Regenerate the lockfile and retry |
QUARANTINE_FLAKY | FLAKY (a signature seen flipping pass/fail) | Demote ERROR → WARNING; ticket + memory entry; never silently dropped |
FIX_BRANCH | GENUINE (real regression) | Spin an ultracode fix loop |
A diagnostic Diagnosis may be enriched by an LLM later, but the classification itself is regex-driven so the medic cannot be gamed. Destructive follow-ups (FIX_BRANCH, lockfile regeneration) are additionally filtered through the RollbackPolicy engine (rollback.py) and the canary_rollback helper exported from the same package, so a medic misclassification cannot push destructive changes on advisory evidence.
A self_heal() loop is exposed from src/verel/ci/__init__.py (along with HealResult / HealRound); it iterates the medic's recommendations, re-runs the stage, and stops when a non-RETRY action succeeds or the round budget is exhausted. Pre-commit hook installation lives in hooks.py (install_precommit, is_installed).
Failure Memory — Anti-Regression, Consolidation, Revision
The same Report stream that gates a commit is also written into the failure ledger, defined in src/verel/memory/view.py as a FAILURE-kind MemoryRecord. The pipeline consults this ledger via regression_report() in failure_ledger.py, so a change that reintroduces a previously-fixed signature is gated FAIL from memory alone — no need to re-run the failing test to notice the regression.
Records are persisted by src/verel/memory/local.py: a write with the same (subject, predicate, scope) supersedes the prior record, accumulating support_count and bumping epistemic_confidence; conflicting writes drop confidence via contradict(). Three higher-level modules then turn failures into durable, falsifiable memory:
src/verel/memory/consolidate.pyclusters failures (semantically if an embedder is available, bydetail['kind']otherwise), induces a structuredDesignRuleper cluster, and clusters rules into a 2nd-orderSCHEMA. All writes aretrust=candidate— verification is never granted by consolidation alone.src/verel/memory/revise.pyhandles the contraction half: a counterexample in a rule's domain narrows the rule (supersedes the original via the samesubj_pred_key) and may split it into a narrowed general rule + a specific exception, bothcandidate. Confidence collapse leads torejected.src/verel/memory/promotion.pygates the climb fromcandidatetoverifiedbehind a signed, human-ownedHeldOutCorpus; the rule must reachPROMOTE_F1 = 0.8on canary-marked cases to be promoted.
The bus surface that ties this together — verdict.fact_commitment, attest_fact, verify_fact_attestation — was hardened across v0.32.0 – v0.36.0 (see the release notes) so peer beliefs and shared-brain reads carry the same attestation contract as a local grader.
Common Failure Modes
- Hollow gate — a stage declares a
requiredgrader but the report lacks aRunReceipt.gate()fails closed. Fix: ensurerun_graderran (not just a parser on cached output) and thatsign_receiptproduced a signature. - Advisory gating ignored — code treats an
LLM_JUDGEorVISIONCRITICALas blocking. The advisory ceiling inconstants.pywill clamp it toWARN; the bug is in the consumer. - Flaky test thrash — a
QUARANTINE_FLAKYaction is the correct response; do not loopFIX_BRANCHon a known flaky signature, and do not delete the test. - Monorepo scope —
run_stagetakes adiff_filesset, so a stage can be filtered to one package. Community recipe for per-package gating in monorepos is tracked in issue #4.
See Also
Source: https://github.com/amitpatole/verel / Human Manual
Brain, Scope Lattice & Shared Verified Memory
Related topics: Overview & the Five-Organ Architecture, Fleet, Tool-smith, Surfaces & Operations
Continue reading this section for the full explanation and source context.
Related Pages
Related topics: Overview & the Five-Organ Architecture, Fleet, Tool-smith, Surfaces & Operations
Brain, Scope Lattice & Shared Verified Memory
Overview & Role in the Substrate
Verel's brain is the trust layer that turns per-episode perceptions into durable, recallable knowledge for agents. It sits behind the same MemoryView Protocol regardless of backend (local SQLite, hosted HTTP MemoryServer, replicated cluster, or a mem0/Ollama adapter), so an agent never has to change code to swap substrates. The thesis, taken from the module guide (src/verel/README.md), is that an agent's output is a *hypothesis* until a grader returns a verdict; the brain's job is to keep that hypothesis from polluting future runs. The two orthogonal quantities the brain tracks are epistemic_confidence (how strongly the substrate believes the claim) and retrieval_strength (how reachable the claim is right now), kept separate on purpose so belief and reachability can be tuned independently (src/verel/memory/view.py).
flowchart LR
A[Agent / MCP tool] -->|verel_recall / verel_remember| B[MemoryView]
B --> C[Scope Lattice<br/>self < team < org < global]
C --> D[LocalMemory<br/>SQLite]
C --> E[MemoryServer<br/>HTTP/TLS]
C --> F[ReplicatedMemory<br/>HA cluster]
B --> G[Trust gate:<br/>candidate → verified]
G --> H[Consolidate / Revise]
H -->|DesignRule, Schema| D
H -->|counterexample| I[Reject / Narrow]MemoryRecord, Trust Tiers & the Interference Rule
Every belief is a MemoryRecord with a content-addressed identity: the id is derived from the normalized (subject, predicate, scope) triple via make_key / make_id (src/verel/memory/view.py). The kind is one of FACT, DESIGN_RULE, SCHEMA, FAILURE, or SKILL — the same key is used regardless of kind, so a FACT and a SKILL with the same (subject, predicate, scope) share an id, which is why src/verel/memory/principal.py keeps the five reserved predicates/scopes server-side and refuses a client write that collides with them.
Trust progresses through explicit tiers rather than a free-floating float (src/verel/memory/view.py):
| Tier | Source | Notes |
|---|---|---|
candidate | initial write, all induced rules/schemas | NEVER auto-verified — only corroboration can lift it |
verified | held-out eval gate / corroboration / fact-bound attestation (v0.34.0) | requires a *verifier* in the importer's own context |
rejected | contradict collapsed confidence below the reject floor | revision only lowers trust, never raises it without evidence |
The interference rule in LocalMemory.write is what keeps the store honest: if an incoming MemoryRecord collides on the subj_pred_key, the existing record is *superseded* (same text bumps support_count and confidence by 0.1, resets retrieval_strength); conflicting text is still kept but contradict-marked so the rule can collapse later (src/verel/memory/local.py).
Scope Lattice & Recall Resolution
Recalls are scoped. The lattice resolves DOWN — a read at self sees self < team < org < global, so an agent never gets a team claim when it asked for self, but team can see what its members learned. Scope strings are typed: repo:<name>, global, component:<x>, and the reserved meta:authors ledger used by AuthorTrust (src/verel/memory/share.py). The MCP surface verel_recall(query, scope, kind, k) introduced in v0.31.0 rides this lattice directly; with VEREL_BRAIN_URL set (v0.35.0) the same call reaches the remote MemoryServer, and v0.36.0 hardens the transport with TLS so a non-loopback bind fails closed (releases: v0.31.0, v0.35.0, v0.36.0).
A recall that returns a peer-authored belief is *not* trusted on the say-so of the peer — the importer re-verifies through a Verifier callback before confidence is updated, and the outcome is logged into AuthorTrust with a Laplace-smoothed prior. This is the principle the module guide calls "trust does not travel" (src/verel/README.md).
Consolidation, Revision & Schema Induction
Consolidation is the *growth* half of memory; revision is the *contraction* half. Both are offline-batch and use an injectable ChatFn so they're testable without network (src/verel/memory/consolidate.py, src/verel/memory/revise.py).
- Cluster recurring failures — semantically when an embedder is wired in, otherwise by the coarse
detail['kind']label. - Induce a structured
DESIGN_RULEwith{condition, action, applies_to}slots, written astrust=candidateandepistemic_confidence=0.5. - Induce a
SCHEMA(order-2) by clustering rules;induce_hierarchykeeps walking up tomax_order=4. Height never confers trust — every node still has to earn it.
When a new failure lands in a rule's domain, revise_with_counterexample (1) records the counterexample (no corroboration), (2) contradicts the rule (confidence drops by contradiction_delta=0.2), and (3) once split_after=2 counterexamples accumulate, splits the over-broad rule into a narrowed rule (which *supersedes* the original via the interference key) plus an exception rule — both candidate and both re-earning trust the normal way. If confidence collapses below the reject floor the rule is REJECTED. Revision only ever lowers trust or narrows scope, mirroring the same direction the GraderKind bus enforces for CI verdicts (src/verel/ci/graders.py).
See Also
- Module guide: src/verel/README.md — six organs at a glance and the
gate/verdictcontract - v0.36.0 release notes — TLS for routable brain/lease/registry binds
- v0.35.0 release notes — MCP recall/remember over a remote authenticated brain
- v0.34.0 release notes — cross-principal verified tier (fact-bound attestation)
- v0.32.0 release notes — the authenticated multi-principal brain
- v0.31.0 release notes — the shared verified brain
Source: https://github.com/amitpatole/verel / Human Manual
Fleet, Tool-smith, Surfaces & Operations
Related topics: Overview & the Five-Organ Architecture, Verdict Bus, Graders & Self-Healing CI, Brain, Scope Lattice & Shared Verified Memory
Continue reading this section for the full explanation and source context.
Related Pages
Related topics: Overview & the Five-Organ Architecture, Verdict Bus, Graders & Self-Healing CI, Brain, Scope Lattice & Shared Verified Memory
Fleet, Tool-smith, Surfaces & Operations
Verel's "Fleet" and "Tool-smith" organs operationalize the rest of the substrate: the fleet is *agents managing agents*, and the tool-smith is *agents building and certifying their own tools*. Together with the operator-facing surfaces — the verel CLI, the verel-ci git-hook CLI, and the verel-mcp server — they close the loop from a grader verdict to a multi-tenant, sandboxed action that another party can verify.
Fleet — agents managing agents
The fleet module exports a v1-cut control plane: roles, retries, heartbeats, a single-writer scheduler over a Task DAG, manager fan-out, and a worker adapter that gates every node through the verdict bus (Source: src/verel/fleet/__init__.py:1-7).
The DAG lives in task.py and exposes Task, TaskState, Role, Barrier, BarrierKind, BudgetLease, and RetryPolicy. A scheduler in scheduler.py walks the DAG, and workers in worker.py wrap ultracode_worker / worktree_ultracode_worker so every node still passes through gate() before being marked done.
Coordination primitives are kept small but real:
- Leases —
lease.pyshipsInMemoryLeaseStoreandSqliteLeaseStore, withLease,LeaseStore, and aFencingErrorfor split-brain handling. - Worktrees —
worktree.pydefinesWorktree,WorktreeManager, andLeaseHeld, the isolation boundary used when many workers must edit the same repo concurrently. - Manager fan-out —
manager.pyre-exportsplan_over_artifacts,to_tasks,validate_fanout,clamp, plus theFanOut/Subtaskmodels; the LLM-driven variant lives inllm_manager.py(decide_fanout). - Multi-repo & sagas —
multirepo.pyplans cross-repo graphs (plan_multi_repo,repo_of,CrossDep);saga.pyruns compensating workflows (run_saga,git_revert_head,SagaResult). - Remote control plane —
control_plane.pyhostsControlPlaneServer+RemoteLeaseStoreso a fleet on different machines shares one lease authority. - Git fencing —
fence_sink.pywiresvalidate_push,push_options, andwrite_pre_receive_hookfor pre-receive enforcement.
The README explicitly scopes what is *not* in v1: "Worker fencing + git fencing sink are v3" (Source: src/verel/fleet/__init__.py:5-7), so treat remote worker fencing as a roadmap item, not a current control.
Tool-smith — agents building their own tools
The tool-smith organ implements the detect → scaffold → test → register → reuse lifecycle. Tools live as SKILL records in procedural memory behind the same MemoryView, gated by the same attested eval discipline as facts/skills — verified-and-auto for read-only/idempotent tools, human-review-gated for destructive ones (Source: src/verel/toolsmith/__init__.py:1-7).
Core pieces:
| File | Role |
|---|---|
smith.py | ToolSmith, ToolSpec, ToolCase, eval_tool_cases, BuildResult |
registry.py | ToolRegistry, ToolRecord, SideEffect, semantic find() |
sandbox.py | run_sandboxed, SandboxError — in-process guardrail |
container.py | best_runner, bwrap_available, run_container — real isolation |
seccomp.py | build_bpf, PROFILE_*, DENIED_SYSCALLS / ALLOWED_SYSCALLS |
seccomp_learn.py | learn_syscall_profile, strace_available |
The README is explicit that "the in-process tool guard is a guardrail, not a sandbox — real isolation is the bwrap container runner (isolation='container'): no network, read-only system-only fs, ephemeral tmp, cleared env, and a seccomp-bpf syscall filter (verel[container])" (Source: README.md:42-50). Three profiles, weakest→strongest: denylist (default), allowlist, and capability (Source: src/verel/toolsmith/__init__.py:23-32).
The Coder agent in agents/coder.py (LLMCoder, make_fix_hook) bridges the verdict bus to file rewriting — make_fix_hook returns an async FixHook that ultracode_loop calls when a gate fails, so the same org produces a candidate patch that is immediately re-gated.
Surfaces — how operators reach the substrate
Three top-level surfaces are documented in the package README (Source: src/verel/README.md:23-30):
cli.py→verel {doctor, loop, fleet, heal, ci}— the operator's day-to-day surface. Community issue #2 flags thatdoctorshould additionally report installed extras and provider-key presence, which is a current gap.ci/__main__.py→verel-ci {check, precommit, install}— the git-hook / pre-commit surface; the LangToolchain map currently coverspython,js, andgo(Source: src/verel/ci/graders.py), with Rust requested in issue #1 and broader real-sample coverage in #3.mcp_server.py→verel-mcp— exposes the four hero verbs (gate,sight,recall/remember,verify) to any MCP-capable agent.
Operations, security posture, and known gaps
TLS for non-loopback binds is the headline of v0.36.0: MemoryServer, ControlPlaneServer, and RegistryServer accept certfile=/keyfile=/ssl_context=, loopback stays zero-config. Bind hardening fails closed when non-loopback is requested without cert material.
Operationally, three community-acknowledged gaps remain on these surfaces:
- Monorepo gating recipe —
verel-ciis repo-scoped; issue #4 asks for adocs/usage.mdrecipe and anexamples/demo_monorepo_ci.pyrunning separate inner loops per package. - Rust graders — issue #1 wants
parse_cargo_test/parse_clippynext to the Python/JS/Go parsers. - Doctor completeness — issue #2 wants a small table of optional extras and present keys.
Until those land, the operational rule of thumb is: keep the verdict bus as the single entry point, keep destructive tools behind the allowlist or capability seccomp profile, and route any non-loopback fleet/brain/registry bind through TLS.
See Also
- Verdict Bus & Eyes (sight, memory, registry)
- Memory Substrate — local, shared, revision, and librarian
- Skill Registry — artifacts, transfer, and H2 measurement
- Verel Security Model — sandbox vs. container, seccomp profiles
Source: https://github.com/amitpatole/verel / Human Manual
Doramagic Pitfall Log
Source-linked risks stay visible on the manual page so the preview does not read like a recommendation.
Developers may expose sensitive permissions or credentials: verel doctor: report installed extras and key presence
Developers may fail before the first successful local run: Add a Rust toolchain (cargo test + clippy) to the CI graders
Upgrade or migration may change expected behavior: v0.28.0 — quorum reads: a point read survives the leader being down
Upgrade or migration may change expected behavior: v0.29.0 — security hardening: full attack-surface audit + red-team
Doramagic Pitfall Log
Found 25 structured pitfall item(s), including 1 high/blocking item(s). Top priority: Security or permission risk - Security or permission risk requires verification.
1. Security or permission risk: Security or permission risk requires verification
- Severity: high
- Finding: Developers should check this security_permissions risk before relying on the project: verel doctor: report installed extras and key presence
- User impact: Developers may expose sensitive permissions or credentials: verel doctor: report installed extras and key presence
- Recommended check: Before packaging this project, run the relevant install/config/quickstart check for: verel doctor: report installed extras and key presence. Context: Observed when using docker
- Evidence: failure_mode_cluster:github_issue | https://github.com/amitpatole/verel/issues/2
2. Installation risk: Installation risk requires verification
- Severity: medium
- Finding: Developers should check this installation risk before relying on the project: Add a Rust toolchain (cargo test + clippy) to the CI graders
- User impact: Developers may fail before the first successful local run: Add a Rust toolchain (cargo test + clippy) to the CI graders
- Recommended check: Before packaging this project, run the relevant install/config/quickstart check for: Add a Rust toolchain (cargo test + clippy) to the CI graders. Context: Observed when using python
- Evidence: failure_mode_cluster:github_issue | https://github.com/amitpatole/verel/issues/1
3. Installation risk: Installation risk requires verification
- Severity: medium
- Finding: Developers should check this installation risk before relying on the project: v0.28.0 — quorum reads: a point read survives the leader being down
- User impact: Upgrade or migration may change expected behavior: v0.28.0 — quorum reads: a point read survives the leader being down
- Recommended check: Before packaging this project, run the relevant install/config/quickstart check for: v0.28.0 — quorum reads: a point read survives the leader being down. Context: Observed when using node, python
- Evidence: failure_mode_cluster:github_release | https://github.com/amitpatole/verel/releases/tag/v0.28.0
4. Installation risk: Installation risk requires verification
- Severity: medium
- Finding: Developers should check this installation risk before relying on the project: v0.29.0 — security hardening: full attack-surface audit + red-team
- User impact: Upgrade or migration may change expected behavior: v0.29.0 — security hardening: full attack-surface audit + red-team
- Recommended check: Before packaging this project, run the relevant install/config/quickstart check for: v0.29.0 — security hardening: full attack-surface audit + red-team. Context: Observed when using python, docker
- Evidence: failure_mode_cluster:github_release | https://github.com/amitpatole/verel/releases/tag/v0.29.0
5. Installation risk: Installation risk requires verification
- Severity: medium
- Finding: Developers should check this installation risk before relying on the project: v0.29.1 — security: 3-round adversarial red-team
- User impact: Upgrade or migration may change expected behavior: v0.29.1 — security: 3-round adversarial red-team
- Recommended check: Before packaging this project, run the relevant install/config/quickstart check for: v0.29.1 — security: 3-round adversarial red-team. Context: Observed when using python, docker
- Evidence: failure_mode_cluster:github_release | https://github.com/amitpatole/verel/releases/tag/v0.29.1
6. Installation risk: Installation risk requires verification
- Severity: medium
- Finding: Developers should check this installation risk before relying on the project: v0.29.2 — CI fix for the v0.29.1 security release
- User impact: Upgrade or migration may change expected behavior: v0.29.2 — CI fix for the v0.29.1 security release
- Recommended check: Before packaging this project, run the relevant install/config/quickstart check for: v0.29.2 — CI fix for the v0.29.1 security release. Context: Observed when using python, docker
- Evidence: failure_mode_cluster:github_release | https://github.com/amitpatole/verel/releases/tag/v0.29.2
7. Installation risk: Installation risk requires verification
- Severity: medium
- Finding: Developers should check this installation risk before relying on the project: v0.30.0 — the verification substrate
- User impact: Upgrade or migration may change expected behavior: v0.30.0 — the verification substrate
- Recommended check: Before packaging this project, run the relevant install/config/quickstart check for: v0.30.0 — the verification substrate. Context: Observed when using python
- Evidence: failure_mode_cluster:github_release | https://github.com/amitpatole/verel/releases/tag/v0.30.0
8. Installation risk: Installation risk requires verification
- Severity: medium
- Finding: Developers should check this installation risk before relying on the project: v0.31.0 — the shared verified brain
- User impact: Upgrade or migration may change expected behavior: v0.31.0 — the shared verified brain
- Recommended check: Before packaging this project, run the relevant install/config/quickstart check for: v0.31.0 — the shared verified brain. Context: Observed when using python
- Evidence: failure_mode_cluster:github_release | https://github.com/amitpatole/verel/releases/tag/v0.31.0
9. Installation risk: Installation risk requires verification
- Severity: medium
- Finding: Developers should check this installation risk before relying on the project: v0.32.0 — the authenticated multi-principal brain
- User impact: Upgrade or migration may change expected behavior: v0.32.0 — the authenticated multi-principal brain
- Recommended check: Before packaging this project, run the relevant install/config/quickstart check for: v0.32.0 — the authenticated multi-principal brain. Context: Observed when using python
- Evidence: failure_mode_cluster:github_release | https://github.com/amitpatole/verel/releases/tag/v0.32.0
10. Installation risk: Installation risk requires verification
- Severity: medium
- Finding: Developers should check this installation risk before relying on the project: v0.34.0 — cross-principal verified tier (fact-bound attestation)
- User impact: Upgrade or migration may change expected behavior: v0.34.0 — cross-principal verified tier (fact-bound attestation)
- Recommended check: Before packaging this project, run the relevant install/config/quickstart check for: v0.34.0 — cross-principal verified tier (fact-bound attestation). Context: Observed when using python
- Evidence: failure_mode_cluster:github_release | https://github.com/amitpatole/verel/releases/tag/v0.34.0
11. Installation risk: Installation risk requires verification
- Severity: medium
- Finding: Developers should check this installation risk before relying on the project: v0.35.0 — MCP recall/remember over a remote authenticated brain
- User impact: Upgrade or migration may change expected behavior: v0.35.0 — MCP recall/remember over a remote authenticated brain
- Recommended check: Before packaging this project, run the relevant install/config/quickstart check for: v0.35.0 — MCP recall/remember over a remote authenticated brain. Context: Observed during installation or first-run setup.
- Evidence: failure_mode_cluster:github_release | https://github.com/amitpatole/verel/releases/tag/v0.35.0
12. Installation risk: Installation risk requires verification
- Severity: medium
- Finding: Project evidence flags a installation risk. Review the linked source before relying on this workflow.
- User impact: May increase setup, validation, or first-run risk for the user.
- Recommended check: Reproduce the official install and quickstart path in an isolated environment.
- Evidence: community_evidence:github | https://github.com/amitpatole/verel/issues/1
Source: Doramagic discovery, validation, and Project Pack records
Community Discussion Evidence
These external discussion links are review inputs, not standalone proof that the project is production-ready.
Count of project-level external discussion links exposed on this manual page.
Open the linked issues or discussions before treating the pack as ready for your environment.
Community Discussion Evidence
Doramagic exposes project-level community discussion separately from official documentation. Review these links before using verel with real data or production workflows.
- Docs: add a 'gate a monorepo with per-package stages' recipe - github / github_issue
- Broaden grader-parser test coverage with more real tool-output samples - github / github_issue
- verel doctor: report installed extras and key presence - github / github_issue
- Add a Rust toolchain (cargo test + clippy) to the CI graders - github / github_issue
- v0.37.0 — mTLS, certificate pinning, per-IP fairness - github / github_release
- v0.36.0 — TLS for routable brain/lease/registry binds - github / github_release
- v0.35.0 — MCP recall/remember over a remote authenticated brain - github / github_release
- v0.34.0 — cross-principal verified tier (fact-bound attestation) - github / github_release
- v0.32.0 — the authenticated multi-principal brain - github / github_release
- v0.31.0 — the shared verified brain - github / github_release
- v0.30.0 — the verification substrate - github / github_release
- v0.29.2 — CI fix for the v0.29.1 security release - github / github_release
Source: Project Pack community evidence and pitfall evidence