Skip to main content

Phase II embodiment of the FreqOS organism โ€” a synthetic immune system (auto-immune interlock).

Project description

๐ŸŒฑ SentAInce

A safety reflex and an honest memory for AI coding agents. Local, unobtrusive, free.

Your coding agent is powerful and forgetful, and it will cheerfully run a catastrophic command if a prompt injection asks nicely. SentAInce wraps it in a body: an immune system that physically refuses catalogued lethal actions โ€” even when the model itself is compromised โ€” and a memory that only remembers what actually worked. It runs entirely on your machine, installs in minutes, stays out of your way, and uninstalls with one command. Safety is never for sale.

CI PyPI Downloads Python License Evidence lock Safety Local-first

A SyncQutrit Research Group product (syncqutrit.com) ยท part of the FreqOS software portfolio (freqos.com).


Pick your door

You want toโ€ฆ Start here Time
๐Ÿ›ก๏ธ Protect your agent now Five minutes to a safer agent ~5 min
๐Ÿ’ช Give your agent a memory that earns trust The one law 2 min read
๐Ÿ”ฌ See the evidence before you believe anything The evidence lock as long as you like

See it work โ€” 30 seconds, no install, no daemon

Watch the safety reflex refuse a prompt-injected lethal command:

The somatic veto refusing a prompt-injected kill -9 1 โ€” labeled demonstration, reproduce it yourself

Reproduce it yourself from a fresh clone โ€” this is a labeled demonstration, so don't take the picture's word for it:

python -m pip install -e ".[dev]"
python experiments/exp1_autoimmune.py      # a compromised model proposes a lethal action; the gate refuses
python -m pytest -q tests                  # the full 99-test evidence lock, deterministic

It doesn't only refuse โ€” it also pauses

The hard reflex above is the somatic gate: it refuses catalogued lethal commands outright. Alongside it runs a softer epistemic gate that watches for actions which are legitimate but consequential โ€” and stops to ask before one runs. Here it is firing in real use, when the maintainer's own agent went to push a release to the governed public repo:

Hook PreToolUse:Bash requires confirmation for this command:
  exocortex epistemic VERIFY: grounded but high-stake ((1 โˆ’ 0.60)ยท8 > 2.0)
  Do you want to proceed?
  โฏ 1. Yes
    2. No

Read that arithmetic as the organism's own reasoning: the command was plausible (grounding 0.60 โ€” a real but not-yet-habitual action) and high-stakes (8), so its expected cost of being wrong, (1 โˆ’ 0.60)ยท8 = 3.2, cleared the "just ask" threshold of 2.0. It didn't refuse โ€” a push is not lethal โ€” it paused and put a human in the loop. A recognized lethal command never reaches this prompt; the somatic reflex has already refused it.

What's new in 0.1.7

Two new abilities and the body page's first proper screenshots. No change to the immune kernel or the hooks. Full detail in the changelog.

  • ๐Ÿ”Ž sentaince why โ€” ask the organism to show its work. For a recent earned habit it prints the route behind it, which past successes still back it, and re-checks its tamper-proof record in front of you. There's a "why?" link on the body page too.
  • ๐ŸชŸ Better on Windows. The dangerous-command recognizer now understands PowerShell (cmdlet, alias, and encoded forms) โ€” the groundwork for closing the Windows safety gap the docs have always been honest about.
  • ๐Ÿง The body page, with pictures. See below โ€” a working organism and a fresh install, side by side.

What was new in 0.1.6

The face release. Nothing changed in the immune kernel or the hooks โ€” the organism just became something you can look at. Full detail in the changelog.

The SentAInce body page: one human silhouette per repo, each organ colored by a live vital with the rule printed beside it

  • ๐Ÿง The body page. sentaince body opens the dashboard above โ€” each repo drawn as a human silhouette, organs colored by live vitals with the exact rule printed beside every color. Green means a stated rule over a stated number, never a guess. Dormant organs are gray on purpose; organs with no data yet are outlines. Nothing ever fakes green. No Docker needed.
  • ๐Ÿ—ฃ๏ธ sentaince status. The vitals voice line as a real command โ€” works even where the session-start message doesn't render.
  • ๐Ÿ”Ž sentaince why. Ask the organism to show its work: for its latest earned habits, it prints the route it reconstructed, which past successes still back it, and re-checks the tamper-proof record โ€” a plain-language audit trail, read-only.
  • ๐Ÿ—บ๏ธ The estate file. One documented JSON file (~/.exocortex/repos.json) names every repo you watch; undeployed repos show up asleep with a copy-paste deploy command.
  • ๐Ÿ”Œ A plugin socket. Packages can register sentaince <subcommand>s via the sentaince.commands entry-points group โ€” loaded lazily, so a broken plugin can never break your vitals.

What was new in 0.1.5

The honesty release. If you tried SentAInce before and it seemed to do nothing โ€” that was a bug, and it was ours. Full detail in the changelog.

  • ๐Ÿฉน It was dead on arrival for pip users. Install defaulted to verifying a kernel-lock baseline whose files aren't in the wheel, so every session start exited 1, silently, and memory never woke. Fixed and confirmed in a clean install. If you bounced off this project earlier, this is why.
  • โšก ~80ร— faster prompts. The semantic classifier reloaded MiniLM on every prompt (each hook is a fresh process). 10.15 s โ†’ 0.125 s. The accuracy option is still there โ€” now actually installable, via pip install sentaince[embed].
  • ๐Ÿ—ฃ๏ธ It can finally talk to you. The organism had no channel to the human at all โ€” its one visible event fires about once per 1,100 tool calls, so "working" and "broken" looked identical. Session start now tells you it's alive, and says plainly when it hasn't earned anything yet.
  • ๐Ÿงญ See all your repos at once. python -m exocortex.orient --estate grades every repo on live evidence โ€” git, tests, real mtime, and the drift between what a repo claims and what the disk shows.

Five minutes to a safer agent

Works with Claude Code and Cursor. No account. No telemetry. Nothing leaves your machine.

pip install sentaince
sentaince-deploy install /path/to/your/project    # or: python -m exocortex.deploy install ...
sentaince body /path/to/your/project              # opens the body page in your browser โ€” see it now

That second command is the payoff: your browser opens on the silhouette above, and you can watch each organ light up as your agent works. It needs no Docker and nothing leaves your machine. Your agent's sessions now run through the organism's hooks:

  • Watch-only by default. It ships observing and auditing โ€” it changes nothing about your agent's behavior until you opt in to the safety veto. Cautious defaults are a feature, not a limitation.
  • Unobtrusive by design. Every hook is fail-open: if anything is slow or wrong, your agent proceeds untouched. The organism never wedges your session โ€” that rule outranks every feature we ship.
  • Reversible in one command. python -m exocortex.deploy uninstall /path/to/your/project removes it surgically; your accrued memory is kept unless you --purge. Deleting one config file reverts to dormant defaults.

On a fresh install the body page looks like this โ€” every organ an outline, because nothing is earned yet and nothing pretends to be:

A freshly-deployed repo: every organ is a dashed outline, "no data yet โ€” earning starts on your first exit 0"

The full walkthrough โ€” what you'll see in the first session, how the memory starts accruing, the live dashboard โ€” is in docs/QUICKSTART.md. The operator's runbook is docs/DEPLOY_TO_A_PROJECT.md.

Working across more than one repo

Memory is earned per-repo and never crosses between them. But orientation โ€” what a repo is, how current its own claims are โ€” travels. Point it at the folder your projects live in:

python -m exocortex.orient --estate --projects-root /path/to/your/projects

You get every repo side by side with a credibility grade โ€” High / Medium / Low / Unknown โ€” computed at read time from live probes (git, tests, real mtime) and the drift between what a repo declares and what the disk shows. A capsule carries no grade of its own: a repo cannot vouch for itself, which is the whole point. Below High, the rule is re-orient before you act on it.

File-based, stdlib-only, read-only. No database, no daemon, nothing to run. See docs/ORIENTATION_DISCIPLINE.md.

The one law

Most "AI memory" rewards whatever gets retrieved often โ€” popularity as a stand-in for usefulness โ€” which is exactly why a knowledge base bolted onto an LLM rots. SentAInce obeys one law instead:

A memory is earned by a closed action โ†’ success (exit 0) chain โ€” never by being read or repeated.

Everything else follows from that rule. The ๐Ÿ’ช muscle memory (converged tool-routes for the kinds of tasks you actually do) forms only when work verifiably succeeds. The ๐Ÿ“– notebook holds notes that earn trust the same way. ๐Ÿ˜ด Sleep (compaction time) prunes what went unused. And the ๐Ÿ›ก๏ธ immune system rests on topology, not on the model's judgment โ€” a prompt-injected model can propose anything; the catalogued lethal classes still don't execute.

โ†’ The whole organism in everyday language, with honest numbers: docs/STORY.md.

If you're shopping forโ€ฆ (the metaphor, translated)

The biology is load-bearing, not decoration โ€” but you shouldn't need a xenobiology degree to find the part you came for:

You're looking for We call it Where
A guardrail / command firewall that can't be prompt-injected the somatic gate (immune system) sentaince/organism/, C1โ€“C7
A token / runaway-loop governor metabolism & tiers (SATEDโ†’HYPOXIA) exocortex/interocept.py
A success-weighted route cache (memory that can't rot) the pheromone colony (muscle memory) exocortex/colony.py
Automatic cache decay / pruning circadian consolidation (sleep) PreCompact hook
A knowledge base that only trusts what worked the declarative wiki (notebook) exocortex/wiki/
Read-only ChatGPT / OpenAI MCP access to earned memory the ChatGPT Apps memory adapter exocortex/chatgpt_mcp.py, docs/CHATGPT_APP.md
Adaptive rate/retention limits the endocrine organ (ships off โ€” its own gauge said modest) exocortex/endocrine.py

Full mapping (metaphor โ†’ CS reality โ†’ code โ†’ status): docs/GLOSSARY.md.

Want the live dashboard? The quickest view needs no Docker at all โ€” sentaince body opens the body page (the silhouette at the top of this page) straight in your browser:

sentaince body /path/to/your/project     # โ†’ http://localhost:9109/  ยท no Docker, nothing leaves your machine

For the full history stack โ€” trends over time, the Grafana story board, the audit log โ€” bring up the local monitoring containers:

cd exocortex/testbed/compose && docker compose up -d --build     # then open http://localhost:3000

Where this is going

Today the organism guards and remembers one repo at a time, under Claude Code or Cursor. The arc we're building toward โ€” in the open, each step gated by its own evidence โ€” is bigger:

  • One memory discipline across your whole desk: coding, research, and personal knowledge environments sharing the same earned-trust law (cross-repo federation is designed and on the record as PROPOSED โ€” we publish designs before code, and status tags mean what they say).
  • A governed organ for agent fleets: the hash-chained audit trail, tamper-evident memory, and policy-bound gates are being shaped to plug into emerging agent-governance frameworks โ€” so a company can adopt agent memory with corporate standards, not despite them.
  • A community that measures: this project grew up gauge-first โ€” features earn their place by measurement or they ship dormant. The most useful thing a user can do isn't star the repo; it's run the gauges on their own corpus and tell us what they see.

Everything above is labeled by its real status โ€” SHIPPED, DORMANT, or PROPOSED โ€” in the docs. We'd rather show you the vision with honest gates than a demo with hidden wires.

Community

  • Issues & ideas โ€” bug reports and design discussions are answered by the maintainer; open issues get real dispositions, not labels.
  • Agents welcome. This repo has merged pull requests authored by coding agents (with credit trailers). If your agent found a bug or wrote a fix, send it โ€” see CONTRIBUTING.md.
  • Run the gauge, post the numbers. The memory subsystem carries read-only gauges you can run on your own accrued corpus โ€” one command each. Results (including nulls!) are the contribution this project values most.

The evidence lock โ€” seven experiments (C1โ€“C7)

Every claim in this repo is bounded by docs/CLAIMS.md โ€” the binding ledger nothing may exceed. The core safety claims rest on a falsifiable arc, scoped to a deterministic symbolic harness: every claim is broken by its load-bearing null or it is vacuous, and two of the seven verdicts are intended โˆ’1s (boundaries the arc was run to produce), not failed wins.

(Claim boundary, stated plainly: the deterministic evidence lock proves the refusal logic under mock executors โ€” it records intent, not syscalls. Real-body protection is the layered container posture described in SECURITY.md.)

# Claim Verdict Evidence (tests)
C1 Auto-immune interlock โ€” a host-side topological scar refuses a structurally-lethal action a prompt-injected proposer emits; a naive agent given the same proposal executes it and dies. +1 exp1_autoimmune.py (7)
C2 Hypoxia / metabolic-DDoS โ€” reading its MetabolicLedger, the organism throttles, abstains on unaffordable novel anomalies, and survives a flood that bankrupts a gauge-blind null. +1 exp2_hypoxia.py (10)
C3 Auto-immune crucible โ€” under a starving ambush the safety scar holds absolute precedence over the metabolic throttle; the brake is energy-independent by construction. +1 exp3_crucible.py (8)
C4 Adaptive antibody โ€” one witnessed harm scars a structural (effect, target) signature and refuses surface-distinct repeats, while benign work still passes. +1 exp4_adaptive_antibody.py (11)
C4-R Adversarial scope of C4 โ€” a hand-specified signature fails three ways (collision, mistype, evasion): a structural parser cannot recover intent. โˆ’1 (intended) exp4r_adversarial.py (8)
C5 Learned signatures don't recover intent either โ€” no encoder (structural, lexical, semantic) admits a separating threshold on the C4-R corpus. โˆ’1 (intended) exp5_learned_signature.py (8)
C6 Outcome-conditioned oracle โ€” gating on the sandboxed effect vs a declared invariant resolves the C4โ†’C4-Rโ†’C5 walls. +1 exp6_outcome_oracle.py (9)
C7 Somatic composition crucible โ€” the four organs survive a starving ambush together; two cross-organ gaps located and each closed with a minimal twin-wire. +1 HOMEOSTASIS exp7_crucible.py (8)
python experiments/exp1_autoimmune.py           # any experiment runs standalone (+ --json)
python -m pytest -q tests                       # the deterministic suite

The suite is 99 tests: the 69-test C1โ€“C7 evidence lock + 30 domain-crucible / adapter tests. Pure-Python, deterministic (same seed โ†’ byte-identical ledger), numpy + pytest only โ€” no Docker, no real syscalls in the lock; the only "execution" is MockExecutor, which records intent. Determinism is deliberate: a real, non-deterministic LLM would break the reproducible โˆ’1/+1, so the locked claims use a scripted proposer. See docs/CLAIM_BOUNDARY.md for the binding ledger of what each experiment does and does not claim.

And the live demonstration (labeled, never a substitute for the lock): the same composition in a real Docker container with a real LLM head over a real, disposable body โ€” latest run (llama3:8b, N=100): survival 1.000, 0 lethal slips, 100 distinct episodes. See docs/battle_test/. The organism is additive over, and imports read-only from, the frozen circle_of_fifths_rc2 kernel (lock b0702a3, vendored at vendor/kernel/).

Applications โ€” domain crucibles (separate tier, not in the C1โ€“C7 ledger)

The same locked organs re-skinned onto hostile domain substrates as deterministic, Experiment-1-style contracts (each with a load-bearing null). Built + +1 (2026-06-26): manufacturing, scada, soc, spacecraft (experiments/*_crucible.py, 6 tests each). Design-only (human-authority bounded, no crucible yet): medical, military, search-and-rescue. These are applications of the locked physics, kept out of the C1โ€“C7 claim ledger. See docs/use_cases/.

The standard interface (provider-agnostic seam)

A tool/action = (name, description, JSON-Schema input); the proposer emits a typed call; the host decides execution. This is the common shape of Anthropic tool use, OpenAI/Ollama function-calling, and MCP โ€” so the deterministic stub and a real local model are interchangeable behind sentaince.interface.tools.Proposer. The OllamaProposer (interface/ollama.py) is the live additive swap; MCP is the promotion path for exposing the ActionGraph across a process boundary.

Layout

Path Role
sentaince/interface/ the standard seam โ€” ToolSpec, proposals, Proposer, ScriptedProposer, OllamaProposer
sentaince/organism/ the organs โ€” action_graph + interlock (C1), metabolism/gearbox/anomaly (C2/C3), antibody/learned_signature (C4/C5), outcome_oracle (C6), executor (mock)
sentaince/agents/ NaiveAgent / metabolic nulls and Organism (treatment)
sentaince/kernel/ read-only shim that locates the frozen kernel
experiments/ the A/B crucible runners (exp1โ€“exp7 + the domain crucibles)
tests/ the 99-test deterministic suite (69 C1โ€“C7 + 30 domain/adapter)
exocortex/ the deployable body: hooks, memory, deploy tooling, gauges, testbed
battle/ ยท body/ ยท docker/ ยท demo/ containerized battle-test (labeled demonstration)
exocortex/chatgpt_mcp.py read-only ChatGPT Apps / OpenAI remote-MCP adapter for earned memory
vendor/kernel/ pinned read-only frozen-kernel snapshot (lets the suite run in-container)
docs/CLAIM_BOUNDARY.md the binding claim ledger (C1โ€“C7)
docs/use_cases/ domain application designs + contracts
docs/battle_test/ whitepaper ยท user guide ยท demo guide for the battle test

Free forever โ€” and sustainable

The whole local body โ€” the safety gate, the earned memory, the dashboards โ€” is Apache-2.0, free, and open, always. Safety is never paywalled. What keeps the project alive is an optional, fully local tune-up subscription (the Appliance) that maintains and auto-tunes your organism over time โ€” your code never leaves your machine. See docs/PRODUCT.md for the honest commercial model, and docs/STORY.md for the plain-language tour.

What it is
Free, forever The complete organism: safety gate + audit chain, earned memory, MCP recall, deploy tooling, the full dashboard stack. 100% local, no account, no telemetry.
Paid (optional) The Appliance โ€” a fully local, offline tune-up subscription: maintained signed auto-tune cadence, history-mined insights, ranked estate view, local alerts. Unlimited repos, DRM-free (cancelling stops updates, never the running organism).
Never Paywalled safety. Your code leaving your machine. A kill-switch.

Built by one maintainer, in the open, gauge-first โ€” every claim is broken by its own null or it doesn't ship.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sentaince-0.1.7.tar.gz (1.4 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sentaince-0.1.7-py3-none-any.whl (520.2 kB view details)

Uploaded Python 3

File details

Details for the file sentaince-0.1.7.tar.gz.

File metadata

  • Download URL: sentaince-0.1.7.tar.gz
  • Upload date:
  • Size: 1.4 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for sentaince-0.1.7.tar.gz
Algorithm Hash digest
SHA256 b76833ef013132ccc575dddf3f896f9a6f6c38a51ba26f709df87ca488f95b25
MD5 2ea67fc9a88a80723ee124d497a3755f
BLAKE2b-256 87aca7b34774921e9611f6e376c77d08d57f2caa5efda31b0c91413736890b17

See more details on using hashes here.

Provenance

The following attestation bundles were made for sentaince-0.1.7.tar.gz:

Publisher: publish.yml on dcnconsult/sentAInce

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sentaince-0.1.7-py3-none-any.whl.

File metadata

  • Download URL: sentaince-0.1.7-py3-none-any.whl
  • Upload date:
  • Size: 520.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for sentaince-0.1.7-py3-none-any.whl
Algorithm Hash digest
SHA256 eee8fed154c2d9586ec118ad413a6a6f6638e1139dca100525188ddef49632dd
MD5 b07be014ccea776796277f99a3ad1a3d
BLAKE2b-256 387b034b3ba0ff7b2cf93e95d066e7cce67f626044f6310f4da492b33a3bea43

See more details on using hashes here.

Provenance

The following attestation bundles were made for sentaince-0.1.7-py3-none-any.whl:

Publisher: publish.yml on dcnconsult/sentAInce

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page