| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
All checks were successful
standards workspaces build + test / which workspaces this change touches (pull_request) Successful in 22s
standards workspaces build + test / macOS energy backends (pull_request) Has been skipped
standards workspaces build + test / sense-rs (sense/sense-rs, sense-rs, linux) (pull_request) Successful in 25s
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Successful in 3m26s
§5 decides whether an observation is worth attention and §8 seals that decision. Neither says what the recipient *receives*. Where the recipient is a person that is right — the form is a UI concern and a non-goal (§1.6). Where the recipient is a running agent it is not, because the delivery enters the agent's own record of what it has been told, and the standard had nothing to say about a frame that record has to hold. Three plausible forms each corrupt that record, which is why the form is normative rather than a matter of taste: - **as a result on a call the agent made** — the agent made no such call, and a record in which every result answers a call cannot hold one that answers nothing without ceasing to mean that; - **as the principal's own words** — the principal did not say it, and an auditor reading the record afterwards could no longer separate what the agent was *asked* from what it was *told*; - **outside the order** — what an agent did depends on when it learned a thing, so an observation lifted out of order silently changes what the record says it knew at each earlier point. So a surfaced observation delivered to an agent is an **injected observation**: a distinctly-kinded frame occupying one position in the recipient's order, stating the surfacing link it carries out (§8, by content address, so the delivery cites a sealed decision instead of restating it), the event's id and trust level (§2, bound in so a delivery cannot re-tag what it carries), its destination, the authority under which a parked recipient was woken, and the joules the delivery charged — which is not the joules §5 already charged for deciding to surface. The injected kind may not be offered to the agent as something it can author, and a host must refuse the recipient authoring one: an agent able to author its own observations could manufacture a record of having been told something, which is the one thing the frame exists to witness. §11.1 — the destination is stated, never inferred `own` puts the observation in the recipient's own record, so everything it does afterwards was done knowing it. `derived` puts it in a record that inherits the recipient's context, and the recipient's own record gains that record's *outcome*, not the observation — so the recipient never came to know the observation itself. An auditor reading a recipient's record has to be able to tell that an observation was handled elsewhere rather than never delivered, so the two may not be distinguished by shape alone. §11.2 — four conditions refused rather than recorded 1. **A hold is not deliverable.** §8 chains holds precisely so a decision not to surface cannot be quietly forgotten. Delivering one is that fault in the other direction. 2. **The recipient is not the author**, as a steering amendment's amender must differ from its author (JCP §4.7). 3. **A wake needs an authority** — the fire of a standing grant (JCP §4.6). Already-running names none, which is a different fact from a wake nobody permitted, and the two do not share a shape: the absent case carries no key rather than a null, so the distinction is in the frame's address. 4. **A delivery that happened cannot cost nothing.** Something ran: the recipient read the frame. Zero is not a measurement, and where a host cannot measure it estimates and labels (§7) rather than reporting nothing. This is the same rule as a parked run not being free, applied to the other side of the boundary. Conformance class C6, and the published pack gains three frame addresses — the same delivery to each destination, and one that needed a wake against one that did not — plus the four refusals as stable tokens rather than prose, so a reworded message does not move a vector. `tests/pack.rs` holds all of it to the file and asserts the three addresses stay distinct: if the destination or the wake stopped being bound in, two would collapse into one and a delivery could be rewritten after the fact without changing what it addresses to. Every published value from the five existing classes is unchanged. One implementation note. The harness picks its surfaced and held links from the C5 log **by what they decided, not by position** — the first attempt indexed `entries()[1]` as the hold, and that fixture's budget surfaces the first two, so the refusal silently passed as a success. Selecting by decision means a later change to the fixture's budget cannot quietly stop testing a refusal. Evidence, on the Framework box (nothing on the CI host, which is mid-matrix for another PR): clippy `-D warnings` clean over the workspace, every workspace test passes including the nine conformance classes and the five published-pack checks. `check-comparative-prose.sh` and `check-no-vanity-metrics.sh` clean. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
| .. | ||
| conformance/v1 | ||
| sense-rs | ||
| LICENSE | ||
| LICENSE-SPEC | ||
| README.md | ||
| SPEC.md | ||
Sense
The ambient context standard — the always-on, deterministic, energy-accounted record of what is happening around an agent, and a principled account of when that is worth attention.
The tool protocols (MCP, A2A, ACP) standardized the efferent half of an agent: reaching out for tools, peers, payments. Sense standardizes the afferent half — the observations flowing in. It is the substrate an ambient or proactive agent needs but none of them specify: a feed of the world, deterministic enough to audit, with a governed decision about when to interrupt a human.
Where OpenTelemetry traces the agent's own reasoning — non-deterministic by its own admission, and about the agent's insides — Sense records the agent's outside, deterministically, with every datum provenance- and trust-tagged, and every interruption priced in joules and sealed in a receipt.
The four tiers
observe ─▶ project ─▶ detect ─▶ gate ─▶ seal ─▶ verify ─▶ answer
│ │ │ │ │ │ │
store attention attention attention receipt receipt cascade
sense-schema— the wire types: the content-addressed [Event], the vendor-neutralSourceClass, theTrustLevel, the familyEnergy/Provenancemodel, theStateProjection, theHighlight. Pure, no IO.sense-store— a content-addressed, HLC-ordered, replay-deterministic event log. Two runs over the same events yield a byte-identical digest.sense-attention— the part no observability stack carries: a deterministic salience/novelty/uncertainty observer, a k-sigma highlight detector, and the attention budget that gates surfacing by value vs. interruption cost, priced in joules. "Perception ⊗ attention-budget", the afferent dual of JCP's "capability ⊗ joule-budget".sense-cascade— the synthesis tier: a query envelope, deterministic recall retrieval, and a speculative cascade that answers factual-recall queries with zero LLM calls and escalates to a frontier model only as a last resort.sense-receipt— a hash-chained, Ed25519-signed surfacing log: the tamper-evident record of what was surfaced (or held), when, and what it cost. Sealable as a JCR-1 COSE_Sign1 envelope for cross-family verification.
See SPEC.md for the normative standard and
conformance/v1/ for the reproducible vector pack.
Try it
cd sense-rs
cargo run -p sense-cli --bin sense # the whole loop on a scripted stream
cargo test --workspace # the conformance suite
The demo scripts an ambient stream (a quiet shell baseline, a burst of file changes, a low-trust log line), then for each surfaced moment prints the projection, the gate decision, and the joules it cost — then verifies the hash-chained surfacing log and answers a recall query with no model call.
What is not here
- A daemon, sensors, or a UI. A host wires its platform's sensors to the
SourceClassvocabulary and renders highlights however it likes. Sense fixes the datum, the determinism, the attention decision, and the receipt — not the plumbing. - A model. The salience observer and the synthesis fallback are recognized edges; the reference observer is deterministic and the reference fallback is a recorder. A host brings the model it trusts.
- A transport or storage engine. The wire is
serde/JCR-1; the order is the HLC. Ride it over anything; persist it in anything that preserves the order.
Licence
Specification text: CC-BY-4.0 (LICENSE-SPEC). Reference
implementation in sense-rs/: Apache-2.0 (LICENSE).