For teams whose AI agents make promises across days, not seconds.
Your agent said "I'll follow up tomorrow." Did it?
Nous is the ledger every multi-step agent is missing. Every promise tracked. Every deadline watched. A nudge before the slip — and a replay of the exact decision later, same inputs, same weights, same score. Plug in any LLM. Self-host. MIT.
Find dropped follow-upsSurface the three customer follow-ups your agent forgot last week.
Replay last week's decisionSame inputs, same weights — see exactly why your agent flagged the risk it did, and diff against today's policy.
Bisect scoring regressionsCompare a new policy against last quarter's chain without rolling state forward.
Scenario
An agent says it'll follow up tomorrow. Nous tracks whether it does.
Boot the binary, post a commitment, force one tick of the risk
engine, inspect the intervention, replay the decision chain.
Deterministic ScriptedExtractor ships by default — no
LLM key needed for the page demo. Wire any provider to graduate
to real extraction.
$ docker run --rm -p 8080:8080 ghcr.io/felixgeelhaar/nous:latest
$ curl -sX POST localhost:8080/v1/extract \
-H 'Content-Type: application/json' \
-d '{"owner_id":"alice","text":"I will follow up with the client tomorrow"}'
{
"considered": 1,
"saved_ids": ["c_4f2"],
"decision_id": "d_7a1"
}
$ curl -sX POST localhost:8080/v1/evaluate # risk engine tick
{ "evaluated": 1, "interventions": ["i_9c3"], "decisions": ["d_7a1"] }
$ curl -s localhost:8080/v1/interventions | jq '.[0]'
{
"id": "i_9c3", "commitment_id": "c_4f2",
"kind": "nudge", "risk_score": 0.62,
"reason": "deadline within 24h, confidence 0.78"
}
$ curl -s 'localhost:8080/v1/decisions?subject=c_4f2' | jq '.[0]'
{
"id": "d_7a1", "subject": "c_4f2",
"inputs": { "time_to_deadline_hours": 24, "confidence": 0.78 },
"weights": { "overdue": 0.6, "due_soon": 0.3, "confidence": 0.2, "signal": 0.15 },
"outcome": { "score": 0.62, "intervention": "nudge" }
}
/v1/decisions chain is the load-bearing feature.
Every commitment lifecycle, every risk score, every intervention
decision is recorded with its inputs, weights, and outcome.
Bisect a regression in your scoring policy against the same
chain that fired in production.
How it differs
Where Nous fits.
Most agent frameworks orchestrate one call. Nous models the gap between calls — the commitments an agent made, the deadlines they implied, the deliveries it owes — and intervenes when the gap is about to fail.
Architecture
Extract · Score · Intervene · Decide.
LLM is pluggable. The risk engine and decision log are not. Wire any provider for extraction; the rest is deterministic Go.
/v1/extract
owner + text
LLM · scripted
anthropic · openai · gemini · bedrock
commitment ledger
deadline · confidence · status
/v1/evaluate · tick
deadline × confidence
nudge · escalate
automation hooks
Decision log · /v1/decisions
Every score recorded with its inputs, weights, and outcome. Replayable. Bisect-able. Survives redeploys.
Run it
Boot. Post a commitment. Read the audit chain.
docker run --rm -p 8080:8080 ghcr.io/felixgeelhaar/nous:latest
# or: go install github.com/felixgeelhaar/nous/cmd/nous@latest
curl -sX POST localhost:8080/v1/extract \
-H 'Content-Type: application/json' \
-d '{"owner_id":"alice","text":"I will follow up tomorrow"}'
SQLite by default. Postgres for production:
NOUS_DB_TYPE=postgres NOUS_DB_DSN="postgres://..." nous
Wire any LLM provider:
NOUS_LLM_PROVIDER=anthropic NOUS_LLM_API_KEY=sk-ant-… nous
ScriptedExtractor keeps
the demo deterministic. No dashboard yet — API-first, bring your
own UI.
Cognitive stack context
Nous works alone. Plugs into a four-system stack.
Mnemos remembers, Chronos watches time, Nous decides, Praxis executes. Olymp drives the loop. Each is independently usable.
Mnemos · memory
Evidence-linked claims with point-in-time replay and contradiction detection.
Chronos · time
Pattern detection over time-series data. Typed signals, not threshold alerts.
Praxis · execution
Three-verb action layer with idempotency and replay-from-audit.
Olymp · runtime
Drives observe → understand → decide → act → learn end-to-end.