Skip to content

ADR-0025: research positioning ephor as the open-source Salus (Proposed) - #84

Merged
Nabzx merged 1 commit into
mainfrom
research/open-source-salus-83
Sep 5, 2026
Merged

Nabzx merged 1 commit into
mainfrom
research/open-source-salus-83

Conversation

@Nabzx

@Nabzx Nabzx commented Sep 5, 2026

Copy link
Copy Markdown
Owner

Closes #83.

Research output only - ADR-0025, filed as Proposed. No code changes; four open questions need a grilling round before this is ready-for-agent.

Findings

  • Salus confirmed real (YC W26, $4M raised): a closed-source runtime guardrails proxy intercepting agent tool calls, checking policy, returning structured feedback so the agent can self-correct. Its own feature list names "idempotency checks" - direct overlap with this project's most chaos-tested, security-benchmarked guarantee.
  • The core already structurally supports a non-human decision - checked directly in the code, not assumed. Decision.actor_id is already uuid.UUID | None, actor_role is an unvalidated free string, Decision.reason already exists unused. transition()/append_decision() are entirely separate calls with zero dependency on each other; assert_not_self_decision is a caller-invoked helper, never wired into the store itself. "A human always decides" has been enforced by convention in every demo written so far, not by the core. This reframes the real open question: not "can the schema support this" (it already can) but "does this project's own stated principle change, or does auto-decide become a clearly-labelled opt-in layer instead."
  • The retry-feedback loop is genuinely missing but additive - builds on the existing Decision.reason field, not a redesign.
  • The proxy/interception layer is the real, large gap - a live request-path component this project has never had, closer in size to a new flagship than an Adapter.
  • Policy DSL prior art checked: OPA/Rego vs. AWS Cedar (now used by Bedrock AgentCore Policy for exactly this gateway-interception use case, per public reporting) vs. a minimal homegrown format - left open, a real three-way trade-off.

Open questions for a grilling round

  1. Does ADR-0009's own "a human is always the actual gate" principle change, or does auto-decide stay a separate, clearly-labelled opt-in?
  2. Which policy engine - Rego, Cedar, or homegrown?
  3. How much of the proxy/integration surface is v1 scope vs. deferred?
  4. Is the pitch "the open-source Salus" literally, or a narrower, still-true claim?

Salus (YC W26) confirmed real: a closed-source runtime guardrails proxy
that intercepts agent tool calls, checks policy, and returns structured
feedback so the agent can self-correct - idempotency checks are one of
its own named features, direct overlap with this project's most proven
guarantee.

Key finding, checked in the code not assumed: ephor.approvals never
structurally required a human decision at all - Decision.actor_id is
already uuid.UUID | None, actor_role is an unvalidated free string,
Decision.reason already exists unused, and transition()/append_decision()
are entirely separate calls with no dependency on each other.
'assert_not_self_decision' is a caller-invoked helper, not wired into the
store. 'A human always decides' has been enforced by convention in every
demo written so far, not by the core - meaning the real open question was
never whether the schema can support auto-decide (it already can), but
whether this project's own stated principle changes to describe that
honestly, or auto-decide becomes a clearly-labelled opt-in layer instead.

Also found: the retry-feedback loop needs new work (a synchronous
decide-now-return-why surface), but builds on the existing reason field,
not a redesign. The proxy/interception layer is the real, large gap - a
live request-path component this project has never had, closer in size to
building a new flagship than adding an Adapter. Policy DSL prior art
checked: OPA/Rego (mature, external runtime) vs AWS Cedar (newer, now used
by Bedrock AgentCore Policy for exactly this gateway-interception use case
per public reporting) vs a minimal homegrown format - left open.

Four open questions for a grilling round, filed as #83. Not built - this
is the research output only.
@Nabzx
Nabzx merged commit 6b5ed73 into main Sep 5, 2026
7 checks passed
@Nabzx
Nabzx deleted the research/open-source-salus-83 branch September 5, 2026 19:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Research: position ephor as the open-source Salus - runtime guardrails proxy, auto-decide, retry-feedback

1 participant