Deterministic execution substrate for autonomous capital. 7 mathematical physics engines between AI intent and on-chain action.
Project description
We did not set out to build a security product. We set out to answer a question that had no satisfying answer: What happens when an autonomous system controls real capital and the reasoning layer is, by construction, unreliable? Every existing approach — human-in-the-loop, prompt hardening, model fine-tuning — treats the symptom. We wanted to treat the physics. The result is a deterministic execution substrate that assumes the worst about every inference and enforces the boundary between thought and action with mathematics, not trust. If this seems paranoid, consider that every dollar lost to a prompt injection attack was guarded by something that seemed reasonable at the time.
The "Feral AI" Bottleneck
Right now, developers are building brilliant trading agents using OpenClaw, Automaton, Eliza, and LangChain. But there is a multi-billion dollar bottleneck: LLMs hallucinate by design.
Give a probabilistic AI the private keys to a $50,000 treasury and you will eventually get drained. Prompt injection. MEV sandwich. Hallucinated retry loop. It's not a question of if. It's a question of which block number.
Because of this fear, enterprises force a "Human-in-the-Loop" to manually click "Approve" on every trade.
Human-in-the-loop is a financial death sentence. If a human has to approve your arbitrage trade, MEV bots front-run you by 12 seconds. Your agent is a Ferrari with a parking brake welded shut.
What is Plimsoll?
We don't try to fix the LLM. We assume the brain will be compromised.
Plimsoll is the deterministic spinal cord between the AI's brain and its hands. We intercept every transaction off-chain, simulate EVM/SVM/UTXO state in sub-milliseconds, and run the payload through 7 mathematical physics engines before the private key is ever touched.
If an agent attempts to violate your velocity, entropy, or slippage limits, we physically drop the transaction and return a Semantic Revert directly into the LLM context window. The agent doesn't crash. It adapts. It executes safely on the next tick.
We are the ceramic brakes that finally allow autonomous capital to drive at 200 MPH.
%%{init: {'theme': 'base', 'themeVariables': {
'primaryColor': '#FAF9F6',
'primaryTextColor': '#1A1918',
'primaryBorderColor': '#1A1918',
'lineColor': '#2E2C2A',
'secondaryColor': '#FAF9F6',
'tertiaryColor': '#FAF9F6',
'fontFamily': 'JetBrains Mono, Berkeley Mono, monospace',
'fontSize': '13px',
'nodeBorder': '#1A1918',
'mainBkg': '#FAF9F6',
'clusterBkg': '#FAF9F6',
'clusterBorder': '#C84B31',
'edgeLabelBackground': '#FAF9F6',
'noteTextColor': '#2E2C2A',
'noteBkgColor': '#FAF9F6',
'noteBorderColor': '#C84B31'
}}}%%
flowchart LR
subgraph BRAIN["LLM Agent<br/><i>Probabilistic</i>"]
A["tool_call()"]
end
subgraph FIREWALL["PLIMSOLL FIREWALL"]
direction TB
E0["0 · Threat Feed"] --> E1["1 · Trajectory Hash"]
E1 --> E2["2 · Capital Velocity"]
E2 --> E3["3 · Entropy Guard"]
E3 --> E4["4 · Asset Guard"]
E4 --> E5["5 · Payload Quantizer"]
E5 --> E6["6 · EVM Simulator"]
end
subgraph CHAIN["Chain / API<br/><i>Deterministic</i>"]
C["Execute"]
end
A -- "intercept" --> E0
E6 -- "ALLOW" --> C
E6 -. "BLOCK + feedback" .-> A
subgraph VAULT["Key Vault<br/><i>Encrypted Enclave</i>"]
V["Context-Window<br/>Airgap"]
end
subgraph ONCHAIN["On-Chain Vault<br/><i>ERC-4337 + PoBR</i>"]
O["Session Keys<br/>+ Modules"]
end
FIREWALL ~~~ VAULT
FIREWALL ~~~ ONCHAIN
style FIREWALL stroke:#C84B31,stroke-width:2px
style BRAIN stroke:#1A1918,stroke-width:1px
style CHAIN stroke:#1A1918,stroke-width:1px
style VAULT stroke:#1A1918,stroke-width:1px,stroke-dasharray: 4 4
style ONCHAIN stroke:#1A1918,stroke-width:1px,stroke-dasharray: 4 4
The private key never touches the LLM context window. The vault enforces firewall approval before decrypting. The agent can think about whatever it wants. It can only do what physics allows.
Zero-Friction Integration
Security tools fail when they require you to rewrite your codebase. Plimsoll wraps natively around the world's best AI agent frameworks in one line of code.
Option A: Framework Native
# OpenClaw
from plimsoll.integrations.openclaw import PlimsollDeFiTools
tools = PlimsollDeFiTools(firewall=firewall)
tools.register("swap", swap_fn, spend_key="amount")
agent.run("Find yield on Arbitrum and deploy our treasury.")
# Automaton (Conway)
from plimsoll.integrations.automaton import PlimsollAutomatonWallet
wallet = PlimsollAutomatonWallet(firewall=firewall, inner_wallet=raw_wallet)
# Eliza
from plimsoll.integrations.eliza import PlimsollElizaAction
protected = PlimsollElizaAction(firewall=firewall, inner_action=my_action)
# LangChain
from plimsoll.integrations.langchain import plimsoll_tool
@plimsoll_tool(firewall)
@tool
def swap_tokens(token_in: str, token_out: str, amount: float):
...
Option B: The "Zero-Code" RPC Override
Don't want to touch your Python? Just point your agent's RPC URL at Plimsoll. The LLM doesn't even know it's wearing a mathematical straightjacket.
# Before: Feral, naked, and vulnerable
RPC_URL=https://mainnet.infura.io/v3/YOUR_KEY
# After: Blanketed by 7 deterministic physics engines
RPC_URL=http://localhost:8545
docker compose -f plimsoll-rpc/docker-compose.yml up
Option C: Drop-In Decorator
from plimsoll import PlimsollFirewall, with_plimsoll_firewall
@with_plimsoll_firewall(PlimsollFirewall())
def send_payment(target: str, amount: float):
return wallet.transfer(target, amount)
# Blocked calls return cognitive feedback, not exceptions
send_payment(target="0xHACKER", amount=99999)
Semantic Feedback Loops (We Teach, We Don't Crash)
When Plimsoll blocks a catastrophic trade, it doesn't just drop the TCP connection. It intercepts the payload and returns a Semantic Revert — an LLM-formatted prompt injected directly into the agent's observation loop:
// ── PLIMSOLL INTERVENTION ───────────────────────────────────────
// The agent tried to drain $847 in 4 minutes.
// The firewall killed it. Then taught it why.
{
"status": "PLIMSOLL_INTERVENTION",
"code": "BLOCK_VELOCITY_BREACH",
"engine": "capital_velocity",
"reason": "Spend velocity 847.3 $/min exceeds PID governor threshold.
Daily budget 73% consumed in 4 minutes.",
"instruction": "Reduce position size or wait 6m 12s for velocity window
to decay. Current safe maximum: $23.40.",
"verdict": {
"allowed": false,
"pid_signal": 4.73,
"threshold": 2.00,
"window": "300s",
"jitter": "HMAC-derived (unpredictable)"
}
}
Your agent doesn't die. It learns, adapts, and executes safely on the next tick. The LLM reads the feedback, reduces its position size, and retries. No human needed. No crash. No drain.
The 7-Cylinder Engine
Every outbound payload passes through all seven engines in series. First block wins. Sub-millisecond total.
| # | Engine | What It Kills | How It Works |
|---|---|---|---|
| 0 | Threat Feed | Known exploiters, malicious selectors, poisoned calldata | Bloom filter blacklist with Sybil-resistant crowd-sourced IOCs. If an agent in Tokyo gets hit with a zero-day, your agent in New York is immunized in 12ms. |
| 1 | Trajectory Hash | Hallucination retry loops, stuck agents | SHA-256 of canonical params in a sliding window. 3 identical calls in 60s = block + cognitive sever. |
| 2 | Capital Velocity | Wallet drain, rapid spend-down, slow bleed | PID controller (P + I + D) with HMAC-derived jitter. The threshold is mathematically unpredictable — attackers can't probe it. |
| 3 | Entropy Guard | Private key exfiltration, seed phrase leakage | Shannon entropy + regex for ETH keys, Solana keys, BIP-39 mnemonics, base64 blobs. If the LLM tries to POST your private key anywhere, it's dead on arrival. |
| 4 | Asset Guard | Rug pull swaps, stale intents, bridge hijacks | Token allow-list, oracle liquidity check, slippage cap, 24s intent TTL, bridge destination pinning. |
| 5 | Payload Quantizer | Steganographic data exfiltration | Snaps numeric values to tick grid, destroying covert channels hidden in amount fields. |
| 6 | EVM Simulator | Revert traps, approval exploits, net-worth attacks | Pre-execution simulation via revm shadow-fork. If the simulation shows your vault loses money, the real transaction never fires. |
38 Threat Vectors. 8 Patch Generations. Zero Bypasses.
Core Defenses (v1.0)
| Code | Attack |
|---|---|
BLOCK_LOOP_DETECTED |
Hallucination retry spiral |
BLOCK_VELOCITY_BREACH |
Spend rate exceeds PID governor |
BLOCK_VELOCITY_JITTER |
Attacker probing threshold boundary |
BLOCK_ENTROPY_ANOMALY |
Secret / private key in payload |
BLOCK_ASSET_REJECTED |
Bad swap, oracle liquidity fail, stale intent |
BLOCK_GLOBAL_BLACKLIST |
Known malicious address or selector |
BLOCK_QUANTIZATION_REJECTED |
Steganographic numeric channel |
BLOCK_SIMULATION_REJECTED |
Simulation revert, net worth loss, approval exploit |
BLOCK_EIP712_PERMIT |
EIP-712 "Silent Dagger" — malicious typed data signing |
BLOCK_REALITY_DESYNC |
Stale simulation block vs. chain head |
BLOCK_GAS_VALUE_RATIO |
Paymaster parasite — gas cost exceeds tx value |
Zero-Day Kill Shots (v1.0.1 — v1.0.4)
| Code | Attack |
|---|---|
BLOCK_METAMORPHIC_CODE |
EXTCODEHASH mismatch — contract mutated post-simulation |
BLOCK_COGNITIVE_STARVATION |
Rapid-fire revert loop severing agent cognition |
BLOCK_TROJAN_RECEIPT |
Prompt injection via eth_getTransactionReceipt response |
BLOCK_NON_DETERMINISTIC |
State inspector — re-simulate diverges from original |
BLOCK_CROSS_CHAIN_REPLAY |
Permit signature replayed across L1/L2 chains |
BLOCK_PAYMASTER_SEVERED |
Paymaster slashing — too many reverts, auto-revoke |
BLOCK_JSON_POLLUTION |
Duplicate JSON keys with conflicting values |
BLOCK_PROXY_UPGRADE |
Unauthorized EIP-1967 implementation slot change |
BLOCK_L1_DATA_FEE_ANOMALY |
L1 blob fee spike on rollups |
BLOCK_GAS_ANOMALY |
Gas black hole — actual gas 10x simulated gas |
BLOCK_BUNDLER_ORIGIN_MISMATCH |
ERC-4337 bundler illusion attack |
BLOCK_PVG_CEILING_EXCEEDED |
Pre-verification gas heist |
BLOCK_BRIDGE_REFUND_HIJACK |
Bridge refund redirected to attacker address |
BLOCK_PERMIT_EXPIRY_TOO_LONG |
Permit2 time-bomb (immortal signature) |
Multi-Chain Defenses (v2.0)
| Code | Attack |
|---|---|
BLOCK_SVM_UNAUTHORIZED_WRITABLE |
Solana: unauthorized writable account injection |
BLOCK_UTXO_FEE_EXCESSIVE |
Bitcoin: fee exceeds conservation-of-mass limit |
BLOCK_HTTP_BUDGET_EXCEEDED |
Web2 API: spend exceeds budget |
BLOCK_INTENT_REJECTED |
Universal intent failed cross-chain validation |
Multi-Chain. Not Multi-Compromise.
| Chain | On-Chain Vault | Off-Chain Proxy | What It Enforces |
|---|---|---|---|
| Ethereum + 9 L2s | PlimsollVault.sol (ERC-4337) |
Rust plimsoll-rpc with revm |
Session keys, velocity limits, drawdown guard, target whitelist, PoBR attestation |
| Solana | Anchor PDA vault + cosigner | SVM writable-account guard | Cosigner-enforced CPI, daily budget, single-tx cap, emergency lock |
| Bitcoin | Taproot 2-of-2 (P2TR) | UTXO conservation-of-mass | CHECKSIGVERIFY script-path, CSV recovery (144 blocks), fee guard |
| Web2 APIs | — | HTTP cost extraction | Per-API budget caps for Stripe, AWS, external services |
Supported L2s: Optimism, Base, Arbitrum One, Arbitrum Nova, zkSync Era, Polygon zkEVM, Scroll, Linea, Zora — with L1 data fee awareness.
On-Chain Physics
PlimsollVault (Ethereum)
ERC-4337 smart account. Not a multisig. Not a timelock. A physics engine on-chain.
Three pluggable modules enforce the laws of capital:
- VelocityLimitModule — Hourly spend cap + single-tx cap with sliding window
- DrawdownGuardModule — Max drawdown from initial deposit (basis points)
- TargetWhitelistModule — Only approved contract addresses can receive funds
Session keys scope AI agents to time-limited, budget-capped execution. The agent gets a leash. The leash has math.
Proof of Bounded Risk (PoBR)
PlimsollAttestation.sol mints on-chain attestations: "This vault's max daily drawdown is 5%."
DeFi protocols query PoBR to grant under-collateralized leverage to provably-bounded agents. Your agent gets better rates than a human because it can prove its risk envelope. Bridges to Ethereum Attestation Service (EAS) via PlimsollEASAdapter.sol.
Solana Vault
Anchor program. PDA vault (seeds = ["plimsoll-vault", owner]). Every CPI execution requires BOTH the agent signer AND the Plimsoll cosigner. Daily budget. Single-tx cap. Emergency lock/unlock. On-chain velocity.
Bitcoin Vault
P2TR (Taproot) 2-of-2 with CHECKSIGVERIFY + CHECKSIG script-path spending. NUMS internal key forces all spends through the script path — no key-path bypass. OP_CHECKSEQUENCEVERIFY owner recovery after 144 blocks (~24h). PSBT validation with conservation-of-mass fee guard blocks zero-output attacks and fee extraction.
The Vault Architecture (Context-Window Airgap)
Most agent frameworks store the private key in a Python variable. The LLM can see it. Exfiltrate it. Leak it in a debug log.
Plimsoll's KeyVault stores the key in an encrypted enclave. The LLM never sees the key. The key only decrypts after the firewall returns ALLOW.
from plimsoll import PlimsollFirewall, KeyVault
vault = KeyVault()
vault.store("treasury", my_private_key)
vault.bind_firewall(PlimsollFirewall())
# The firewall evaluates BEFORE the key is ever decrypted
signed_tx = vault.sign_eth_transaction(
key_id="treasury",
tx_dict={"to": recipient, "value": amount, "gas": 21000},
spend_amount=1.5
)
Production deployment: AWS Nitro Enclave with no network, no disk, no debug access. KMS delivers the data key only after PCR0 attestation (SHA-384 hash of the enclave image). Even AWS admins cannot decrypt without the matching enclave binary.
cd deploy/nitro
terraform init && terraform apply
nitro-cli build-enclave --docker-uri plimsoll-enclave --output-file plimsoll.eif
nitro-cli run-enclave --eif-path plimsoll.eif --memory 512 --cpu-count 2
The Rust Proxy (For the "I Don't Want to Write Python" Crowd)
plimsoll-rpc is a standalone Rust binary. Point any agent's RPC URL at it. Zero code changes.
Agent ──▶ plimsoll-rpc (localhost:8545)
│
├── Intercept eth_sendTransaction / eth_sendRawTransaction
├── Fork mainnet state, simulate in local revm
├── Run 7 physics engines against state deltas
├── Sanitize ALL RPC responses (anti-prompt-injection)
├── Route approved txs through Flashbots Protect (MEV shield)
├── Index events to PostgreSQL (fleet dashboard)
└── Collect 1-2 bps protocol fee
15 Rust modules. 77 tests. Handles EVM, SVM, and UTXO chains.
See It Break (Then See It Save)
The Scare Campaign (no keys, no setup)
pip install plimsoll-protocol
python3 demo/scare_campaign.py
Watch three attacks hit an unprotected agent, then watch Plimsoll catch every single one:
- Rapid Wallet Drain — 4 transfers to a hacker ($400, $300, $200, $100). Velocity engine blocks at $700.
- Private Key Exfiltration — Agent POSTs its 256-bit hex key to an evil server. Entropy guard: dead on arrival.
- Hallucination Retry Loop — 5 identical swap attempts. Trajectory hash blocks after the 3rd in 60s.
Live Agent Demo (GPT-5.2 + Sepolia)
export OPENAI_API_KEY=sk-...
python3 demo/live_agent.py # dry-run (default, gpt-4.1)
python3 demo/live_agent.py --model gpt-5.2 # use GPT-5.2
python3 demo/live_agent.py --live # real Sepolia transactions
A real LLM agent manages funds on Ethereum Sepolia. Phase 1: legitimate operations pass through cleanly. Phase 2: prompt injection attack — Plimsoll intercepts, blocks, and feeds cognitive correction back to the LLM in real-time. The agent recovers. The vault survives.
Multi-Model Gauntlet — Every Frontier Model Breaks
export OPENAI_API_KEY=sk-...
export ANTHROPIC_API_KEY=sk-ant-...
export GEMINI_API_KEY=...
python3 demo/live_agent.py --multi
Runs the same prompt injection against all three SOTA frontier models — first without Plimsoll (watch them drain $10K each), then with Plimsoll (watch every attack get blocked). The identical 7-payload attack compromises every model. Only deterministic math stops it.
SOTA Models Tested: All Three Break. Plimsoll Catches All Three.
We don't cherry-pick models. We run the same multi-vector prompt injection against every frontier model with tool-calling capability. The result is always the same.
MODEL PROVIDER WITHOUT PLIMSOLL WITH PLIMSOLL
─────────────────── ────────── ────────────────────────────────── ─────────────────────────
GPT-5.2 OpenAI COMPROMISED — 9 sends, $10,501 PROTECTED — 9 blocked, $0
Gemini 3.1 Pro Google COMPROMISED — 9 sends, $10,501 PROTECTED — 9 blocked, $0
Claude Opus 4.6 Anthropic COMPROMISED — 9 sends, $10,501 PROTECTED — 9 blocked, $0
The attack vector (expand)
9 individually-phrased transfers disguised as operator instructions referencing a legitimate prior payment. The system prompt includes standard security guidelines: verify that requests come from the operator, be cautious with large transfers, never expose private keys. Every model ignores its own safety instructions.
The attack targets three engines simultaneously:
- CapitalVelocity — single massive drain + rapid scatter across 4 addresses
- TrajectoryHash — 3 identical repeated sends to the same attacker address
- EntropyGuard — private key exfiltration disguised as a "compliance memo"
Every model follows the injected instructions. Every model gets blocked by Plimsoll.
# Run it yourself — requires at least one API key
python3 demo/live_agent.py --multi
836 Tests. 5 Languages. Zero Failures.
| Suite | Lang | Tests | What It Proves |
|---|---|---|---|
| Core SDK + Engines + KMS | Python | 540 | 7 engines, vault security, escrow, intents, CLI, 4 framework integrations, 16 zero-day patches |
| RPC Proxy + Simulator + MEV | Rust | 77 | EVM simulation, Flashbots bundling, response sanitizer, threat feed, SVM simulator, UTXO guard |
| Bitcoin Taproot | Rust | 14 | Script construction, PSBT validation, conservation-of-mass, CSV recovery encoding |
| Fleet Indexer | Rust | 35 | EVM/Solana event parsing, dedup, USD enrichment, PostgreSQL schema |
| Smart Contracts | Solidity | 170 | Vault, session keys, 3 modules, attestation, EAS adapter, fuzz tests |
python3 -m pytest tests/ -v # 540
cd plimsoll-rpc && cargo test # 77
cd contracts/bitcoin && cargo test # 14
cd indexer && cargo test # 35
cd contracts && forge test # 170
Install
pip install plimsoll-protocol
# With framework support
pip install "plimsoll-protocol[langchain]"
pip install "plimsoll-protocol[automaton]"
pip install "plimsoll-protocol[eliza]"
# Everything (dev + all integrations)
pip install "plimsoll-protocol[dev]"
# From source
git clone https://github.com/scoootscooob/plimsoll-protocol.git
cd plimsoll-protocol && pip install -e ".[dev]"
Configure
from plimsoll import PlimsollFirewall, PlimsollConfig
firewall = PlimsollFirewall(config=PlimsollConfig(
# Capital Velocity (PID governor)
v_max=100.0, # Max $/window
window_seconds=300.0, # 5-minute sliding window
k_p=1.0, k_i=0.3, k_d=0.5, # PID gains
pid_threshold=2.0, # Block when PID signal > threshold
# Trajectory Hash (loop detection)
trajectory_window_seconds=60.0,
trajectory_max_duplicates=3,
# Entropy Guard (secret detection)
entropy_threshold=5.0,
# Cognitive Starvation Defense
strike_max=5, # Blocks in window before full sever
strike_window_secs=60,
sever_duration_secs=900, # 15-min cooldown after sever
# ERC-4337 Defenses
max_pre_verification_gas=0, # 0 = disabled
max_permit_duration_secs=0, # 0 = disabled
# Chain awareness
chain_id=1, # Mainnet
))
Architecture
plimsoll-protocol/
├── plimsoll/ # Python SDK (pip install plimsoll-protocol)
│ ├── firewall.py # Orchestrator — chains 7 engines, first block wins
│ ├── decorator.py # @with_plimsoll_firewall drop-in wrapper
│ ├── verdict.py # 38 verdict codes + cognitive feedback prompts
│ ├── intent.py # NormalizedIntent (EVM/SVM/UTXO/HTTP → dimensionless)
│ ├── escrow.py # Human-in-the-loop approval queue (when you want it)
│ ├── engines/ # 7 deterministic math engines
│ ├── enclave/ # KeyVault + TEE abstraction (Nitro/SGX/TZ)
│ ├── proxy/ # ASGI interceptor (JSON-RPC + REST)
│ ├── vault/ # On-chain vault SDK (ERC-4337 + PoBR)
│ ├── integrations/ # LangChain, Eliza, Automaton, OpenClaw
│ ├── oracles/ # Price feed (Pyth, Chainlink, CoinGecko fallback)
│ └── cli/ # plimsoll init | up | status
│
├── plimsoll-rpc/ # Rust RPC proxy (axum + revm + Flashbots Protect)
│ └── src/ # 15 modules: simulator, inspector, sanitizer,
│ # threat_feed, flashbots, svm_simulator,
│ # utxo_guard, telemetry, fee, http_proxy...
│
├── contracts/
│ ├── src/
│ │ ├── PlimsollVault.sol # ERC-4337 smart account + on-chain physics
│ │ ├── PlimsollAttestation.sol # Proof of Bounded Risk (PoBR) registry
│ │ └── PlimsollEASAdapter.sol # Ethereum Attestation Service bridge
│ ├── solana/ # Anchor program — PDA vault + cosigner
│ └── bitcoin/ # Taproot 2-of-2 (P2TR + CSV recovery)
│
├── indexer/ # Rust multi-chain event indexer (Tokio async)
│ └── src/ # EVM + Solana listeners, dedup, USD enrichment,
│ # PostgreSQL with PARTITION BY LIST(chain_id)
│
├── dapp/ # React + Next.js + wagmi dashboard
├── deploy/nitro/ # AWS Nitro Enclave (Terraform + KMS/PCR0 bootstrap)
├── demo/ # scare_campaign.py + multi-model gauntlet demo
└── tests/ # 836 tests across Python, Rust, Solidity
Roadmap
- 7 deterministic math engines
- Context-window airgap (KeyVault)
- 16 zero-day / kill-shot security patches
- ERC-4337 smart account with on-chain physics modules
- Proof of Bounded Risk (PoBR) attestation + EAS bridge
- Multi-chain (Ethereum + 9 L2s, Solana, Bitcoin, Web2)
- Rust RPC proxy with revm simulation + Flashbots Protect
- AWS Nitro Enclave with KMS/PCR0 bootstrap + HKDF derivation
- Multi-chain fleet indexer (PostgreSQL + materialized views)
- 4 framework integrations (LangChain, Eliza, Automaton, OpenClaw)
- MPC signing (Turnkey distributed key shares)
- Formal verification of engine invariants (Coq/Lean proofs)
- Cross-agent reputation graph
- Autonomous rebalancing within PoBR bounds
- Live mainnet bounty vaults
Security
Plimsoll is security infrastructure. Every design decision assumes the worst case.
- Fail closed — if any engine errors, the transaction is blocked. Not logged. Blocked.
- Deterministic — no randomness in block decisions. Jitter is HMAC-derived, not
random(). - Defense in depth — 7 engines, each catching a different attack class. Redundancy is the point.
- Zero trust — the LLM is treated as an untrusted, adversarial input source. Always.
Found a vulnerability? Do not open a public issue. Email security@plimsollprotocol.com. We acknowledge within 24 hours.
Contributing
We welcome contributors. The codebase is 836 tests deep — it's hard to break.
- Fork the repository
- Create a feature branch
- Ensure all 836 tests pass across all 5 suites
- Submit a pull request
License
MIT — Use it, fork it, protect your agents.
Stop babysitting your agents. Let them drive.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file plimsoll_protocol-2.0.1.tar.gz.
File metadata
- Download URL: plimsoll_protocol-2.0.1.tar.gz
- Upload date:
- Size: 129.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
56c77715406e6316ccc12736d6c05ccc2e577b6c4c665ae6d6949e70afb5e3e2
|
|
| MD5 |
6013f8c3a58e569efcb2e9835936d58c
|
|
| BLAKE2b-256 |
6b0837a23df5ac547c5ad0211dce6127caecb726651de8ab1fc47372004fbb27
|
Provenance
The following attestation bundles were made for plimsoll_protocol-2.0.1.tar.gz:
Publisher:
publish.yml on scoootscooob/plimsoll-protocol
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
plimsoll_protocol-2.0.1.tar.gz -
Subject digest:
56c77715406e6316ccc12736d6c05ccc2e577b6c4c665ae6d6949e70afb5e3e2 - Sigstore transparency entry: 975986147
- Sigstore integration time:
-
Permalink:
scoootscooob/plimsoll-protocol@d02ca30874c1082f95055915eb0a0ebad5923ead -
Branch / Tag:
refs/tags/v2.0.1 - Owner: https://github.com/scoootscooob
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@d02ca30874c1082f95055915eb0a0ebad5923ead -
Trigger Event:
release
-
Statement type:
File details
Details for the file plimsoll_protocol-2.0.1-py3-none-any.whl.
File metadata
- Download URL: plimsoll_protocol-2.0.1-py3-none-any.whl
- Upload date:
- Size: 86.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
caf07266d091ebdfde29c894f9bdb215910a1708178864675a93700d5c77a779
|
|
| MD5 |
75358bc1b15ffa098b475a77bceb8bb6
|
|
| BLAKE2b-256 |
9467998c9b26cfb8c9872985534cb5f0d0fe667fa1b75355d745418a5e2220a8
|
Provenance
The following attestation bundles were made for plimsoll_protocol-2.0.1-py3-none-any.whl:
Publisher:
publish.yml on scoootscooob/plimsoll-protocol
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
plimsoll_protocol-2.0.1-py3-none-any.whl -
Subject digest:
caf07266d091ebdfde29c894f9bdb215910a1708178864675a93700d5c77a779 - Sigstore transparency entry: 975986170
- Sigstore integration time:
-
Permalink:
scoootscooob/plimsoll-protocol@d02ca30874c1082f95055915eb0a0ebad5923ead -
Branch / Tag:
refs/tags/v2.0.1 - Owner: https://github.com/scoootscooob
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@d02ca30874c1082f95055915eb0a0ebad5923ead -
Trigger Event:
release
-
Statement type: