Semstreams
Pre-1.0

Streams in.
Knowledge out.
The loop closes.

A Go framework for systems that take in the world, decide what to do about it, and act without leaving the box. Field telemetry and agent runs land in the same live knowledge graph. Rules decide what they can; models decide what they must. For environments where connectivity is intermittent, compute is finite, and the environment will not cooperate.

Install go get github.com/C360Studio/semstreams

Comms suck.
Design accordingly.

Current AI infrastructure assumes always-on connectivity, abundant compute, rich model access, and an enormous token budget. What we call ambient affluence.

Thirty years of experience has taught us that these idealistic conditions rarely hold. Even if you have the budget, operational reality often has other plans. So if the environment will not cooperate, the architecture should embrace that reality from the start.

So the hard decisions got made early, under conditions that would not let us defer them. Write authority. Restart behaviour. What happens to evidence when there is nobody to send it to. That is the part you inherit, and the part you can check.

Read "Comms Suck" →
Offline first

The graph holds locally and syncs when the link comes back. You don't lose state when you lose the network.

Model unavailable

Rules and workflows keep running. The system degrades through tiers, not off a cliff.

Vocabulary mismatch

Structural relationships still function. You bring what you have; the system meets you there.

One loop.
Closed locally.

Most stacks are a pipeline. Data goes in, something comes out, and the part where the system gets better is a meeting. This one is a loop, and every stage of it runs on the same box.

The graph is the load-bearing piece. Not storage. Orientation. It is the model of the situation that gives an observation its meaning, and it updates as things happen rather than overnight in a batch.

Observation

A sensor reading. A tool call. An agent's answer. The graph does not care which produced it, which is why adding agents needed no new architecture.

Orientation

Entities, relationships and the structure between them, held live. What changed, what it touches, what it now means.

Decision

Rules first, and a model only when the call genuinely needs judgment. Deterministic where it matters, intelligent where it helps.

Action

Components do the work. Rules pass references, never payloads, so a decision cannot quietly blow up a context window.

Learning

What went wrong is written down as a citation-backed lesson, reviewed by a human, and pushed into every run that follows.

The spec you never wrote.

A framework is worth having when your own spec gets shorter. These are the decisions that never announce themselves as decisions. The ones that surface under load, once, expensively. We know which ones you would get wrong because we got them wrong first, in public, and they are gates now because they were bugs then.

⊕

Write Authority

One writer owns graph state. Everything else asks through a typed port. There is no design meeting about who is allowed to write, because there is no version of this where two things do.

◆

Identity Offline

Deterministic IDs carry the deployment that minted them. Two nodes that have never met cannot collide, and their graphs merge later without anything coordinating them.

△

Restart Behaviour

Current facts rehydrate. Unacknowledged work redelivers. Which one you get follows from the primitive you picked, so it is decided before you write a line.

□

Orchestration

Rules trigger, components execute. There is no workflow engine to adopt, outgrow and regret. Multi-step work is coordinated rules with iteration caps and durable state.

Show me the run.

An agentic system you cannot audit is a black hole. A transcript at best, nothing verifiable, and no answer at all to what that tool actually returned. So execution evidence here is a first-class capability rather than trace exhaust. Runs are recorded as graph entities, with the evidence stored beside them, and expiry never reclaims it.

The austere case forced this and then improved it. When there is no observability vendor to ship a trace to and no link to ship it over, evidence has to be local, bounded, durable and answerable on the box. That constraint produced something worth having everywhere.

It is not only our own runs we hold to it. SemConnect answers to an OGC Connected Systems conformance suite we did not write, do not control and cannot grade: 137 of 137 passing. An external qualification you can go run against us yourself is worth more than anything else on this page.

Everyone ships a demo and a story. We ship the run.

Not a methodology.
A flight line.

A problem gets reported with a proposed solution. A trend becomes an SOP. That is the After Action Report, and it is older and harder-won than the industry that rebranded it. It comes from places where the feedback signal is fatal and the debrief is not optional.

It is also, exactly, how lessons work here. Proposed, cited, reviewed by a human, then carried into every run that follows. An SOP nobody enforces is a guideline. That is why the rules in this repo are gates. Lint that fails the build, schema drift that fails the build, breaking changes that do not land without a green end-to-end tier.

We forge and we swing. Semstreams is the hammer; semdev, semsource and the labs are us swinging it at our own work until something bends. A carpenter can only report on using the tool. A toolmaker can only report on making it. Both is rarer, and it is checkable.

Three tiers.
One substrate.

Semstreams has no synthetic benchmark suite standing in for real use. Each sem* project is something we actually needed, built by driving one capability past comfortable: throughput, rules, agentic coordination, edge autonomy, standards conformance. Framework gaps show up as product pain, not as a passing test.

Core: the stack we run on our own metal, every day
semstreams semsource semteams semdev semmem semstreams-ui
Labs: where framework ideas get tested against something real
semboids semmachina semlink semops semconnect semdragon
Supporting: standalone services, no framework pin
semembed servicesim seminstruct

Core is a short list on purpose. It is what runs on our own hardware, continuously, where we are the ones woken up when it breaks. Everything else is a lab. A place, not a stage, where a framework idea gets driven past comfortable against something real before it is anyone's dependency. Some labs stay labs as long as there is another dial to turn. Some earn promotion into Core. An older pin means a project is resting, not rotting.

See what each one stresses →

Early. Honest.
Come break it.

The documentation reflects where we are, not where we're going. If your requirements are clearer in production than they were on paper, this was built for you. Here is the same honesty with the vagueness taken out. Four of these you can check yourself before you decide anything.

The hard decisions are already made
Earned
One binary, NATS the only dependency. Pull it and run it disconnected on a Pi.
Gates, not guidelines
Earned
Clone it and run task lint. Lint warnings and schema drift fail the build. They do not file a ticket.
Someone else grades us
Earned
SemConnect passes 137 of 137 against an OGC conformance suite we did not write. Go run it against us.
Agent runs are recorded as evidence
Earned
Runs land as graph entities with their evidence stored beside them, and expiry never reclaims it.
…and easy for you to get back out
Partial
Admitted operations and typed adapters today. There is no general query front door yet, and you will feel that.
Your own spec gets shorter
Unmeasured
We believe it and we have not published a number. Until we do, treat it as a claim and not a finding.
The loop closes without us
Not yet
Lessons are a first-class capability with an empty corpus. Today a human still carries what was learned into the next run.

We called it alpha early and the tags have since moved to beta. We are not renumbering backwards, and nothing about the deal changed: pre-1.0, and breaking changes will happen.