Skip to content

Quickstart Runtime

SMEPro IOS edited this page Oct 15, 2026 · 2 revisions

Quickstart: the Runtime

The runtime is the IGL language and its reference implementation in Node.js. It runs on your own machine, needs no account, and is what the hosted platform's rules are modeled on. Ten minutes gets you from clone to a governed program that refuses an unauthorized action before any model work happens.

You need Node.js 20 or newer and git.

1. Clone and prove it works

git clone https://github.com/SMEPro-Technologies-LLC/igl.git
cd igl
npm ci
npm run check

That runs the linter, the type check and the suite: the lexer, parser and static checker, the interpreter, the identity graph, the hash chained journal, signed receipts, the governed decode bridge and the regression tests for all nine findings of the security review. All of it passes on a clean clone; that is the bar for every pull request.

2. Run a governed program end to end

node examples/run-igl-language-live.mjs

A small local language model generates text inside the limits a program declares. Watch the trace: every step names the actor, the intent it ran under and the model that was pinned for it. The first run downloads the model, so give it a minute.

Then run the one that matters:

node examples/live-identity-decode.mjs

Two real runs through the decode bridge. The first is a company BOUNDARY graph (Hilcorp Energy, from programs/): the grants define the boundary, and the bridge turns them into a per-token mask so the model can only emit values the boundary covers. The second is an individual FOOTPRINT graph (programs/jordan-avery-dfir-footprint.igl): one statement drafts an incident report and commits; the next tries Action:restore-production-systems. The graph has observed that action five times, but nobody ever granted it, so the runtime refuses the statement during authorization with IGL_FOOTPRINT_DENIED and no model is called. Having seen something happen is not the same as being allowed to do it.

3. See what a program looks like

%igl 0.2

ID[Allco:Operator | Jurisdiction:TX-RRC, Commodity:Oil, Period:2026-Q3]
  :: Intent[Generate_Compliance_Packet, Mode=Full]
  => Context[Traces=Recent(20), MaxDepth=3],
     Compute[
       UDM.Resolve(AgencyCode=TX-RRC, RequiredForms=[PR-202, H-10]),
       AI.Infer(Task=Missing_Fields, Model=claude-sonnet-5, Temperature=0, Seed=7, MinConfidence=0.7),
       IOS.Trace(Channels=[Reasoning, Tools, Code, Search, Context])
     ]
  -> Output[Compliance_Packet, TurnTrace_ID]
  OnFail[Remediate(Notify=compliance_lead), Halt];

Read it top to bottom. ID[...] is who is acting and within what boundary; a statement without both does not parse. Intent[...] is why. Context[...] says which prior traces may be consulted and how deep. Compute[...] separates deterministic work (UDM.), model inference (AI., always with a pinned model) and the trace (IOS.). Output[...] is what is produced, and OnFail[...] says what happens when a step fails. A second statement in the same file that files the report must carry IOS.Attest(Signer=..., Role=...), or it does not compile: nothing files without a human.

The full grammar, the seven design invariants and the evaluation order are in docs/SPEC.md.

4. Persist a journal and replay it

node examples/run-igl-persistent.mjs seed
node examples/run-igl-persistent.mjs replay

The first run writes the journal to disk, hash chained entry by entry; the second, in a new process, replays it. Edit one byte of a stored entry and the next replay fails verification and refuses to load. The runtime also publishes a Merkle root for the journal, so one entry can be proven to an auditor without disclosing the rest. The small scripts in docs/examples/ show both checks in a few lines.

5. Start the provisioning service and IGL Studio

npm run provision

The service listens on 127.0.0.1:8787 only. Open http://127.0.0.1:8787/ for IGL Studio, which turns a plain language description of a person or a company into an identity graph and shows what would be granted versus merely observed. The HTTP API is under /api and the MCP endpoint is POST /mcp.

From the command line, the same resolver:

node provision/cli.mjs "Example Energy, LLC is a Texas oil and gas operator"

The resolver is deterministic. The exact same code runs in your browser in the User Center at id-me.ai, so what you see there is what the service does.

Where authority comes from

6. Running the service for other people

By default it answers only on your machine. To expose it you must set both PROVISION_PUBLIC=1 and PROVISION_API_KEY; without the key the service refuses to start. Callers present their own keys, see only their own tenant's graphs, and are rate limited. Keys are registered in provision/identities.mjs, which is ignored by git so real keys never land in a commit. The full variable list is in the repository README, and the security audit is required reading before you run it anywhere but localhost.

Next

Core Concepts explains the pieces you just used. MCP Integration connects an AI assistant to either the local service or the hosted platform.

Clone this wiki locally