Fibric. Docs fibric.io →
v1.0.0 · stable
Get started

Quickstart

Go from an empty account to a live operator that takes a real, governed action, then read the receipt that proves what it did. Five steps, about ten minutes. Everything runs against a sandbox connector, so no live system is touched.

5 steps ~10 minutes Needs Node 20+ No new hardware
i
Before you begin

You need an email address and a terminal with Node 20 or newer. Everything below uses the sandbox. The AI proposes and a deterministic check approves or blocks it, exactly as in production, but actions run against a simulated system, so you can watch the full loop safely.

1

Create an account

Create a workspace at app.fibric.io. A workspace is your tenant, and its data is provably walled off from every other tenant from the first row written. Grab an API key from Settings → API keys and export it so the CLI can use it.

bash
# export the API key from Settings → API keys
export FIBRIC_API_KEY="sk_live_…"
export FIBRIC_WORKSPACE="acme-ops"
2

Install the CLI

Install the CLI globally and confirm it can reach your workspace. That is all this quickstart needs; requirements, the browser login flow, project scaffolding, and troubleshooting are covered in Installation.

bash
npm install -g @fibric/cli
fibric whoami
$ fibric whoami workspace acme-ops tenant_id t_8f2a…c901 (walled off) plan preview ✓ authenticated
3

Connect your first system

A connector plugs Fibric into a system you already run and is built on MCP. For the quickstart, connect the sandbox order system. It speaks the same capability interface a real order system would, so nothing else on this page changes when you later swap it for the real thing.

bash
# browse what is installable, then add the sandbox order system
fibric connectors search orders
fibric connectors add sandbox-orders --as orders

# confirm the capabilities it now exposes
fibric capabilities ls
$ fibric capabilities ls CAPABILITY CONNECTOR STATUS orders.read sandbox-orders ready orders.hold sandbox-orders ready orders.notify sandbox-orders ready

You bound the connector to the role orders. Operators ask for the capability orders.hold, not for a vendor by name, and that indirection is what makes swapping one order system for another a config change rather than a rewrite.

4

Define an operator and a guardrail

An operator is a named AI worker that senses through connectors, reasons with a base model, and proposes action. It never acts directly. A guardrail is the fail-closed policy the deterministic executor enforces before any proposed action runs. Create operator.ts; this one watches orders and proposes a hold on any order that will miss its ship date.

operator.ts
import { defineOperator } from "@fibric/sdk";

export default defineOperator({
  name: "ship-risk",
  capabilities: ["orders.read", "orders.hold", "orders.notify"],
  goal: "Hold any open order that will not ship on time, and notify the owner.",

  async run(ctx) {
    const orders = await ctx.orders.read({ status: "open" });
    // the model reasons over what it sensed and PROPOSES a plan.
    // it returns proposed actions; it never executes them itself.
    return ctx.propose(orders
      .filter(o => o.willMissShipDate)
      .map(o => ({ capability: "orders.hold", args: { id: o.id } })));
  },
});

Now the guardrail. Policy is the deterministic half of the loop: it approves or blocks what the model proposes, and anything not explicitly allowed is refused.

policy.yaml
# fail-closed: anything not allowed here is refused
version: 1
allow:
  - orders.hold
  - orders.notify
limits:
  orders.hold:
    max_per_run: 25      # cap the blast radius of any one run
    single_flight: by_order_id   # one in-flight action per entity
require_receipt: true
bash
fibric operators deploy ./operator.ts --policy ./policy.yaml
!
The AI proposes, a deterministic check disposes

Even if the model proposed something reckless, the deterministic executor checks every proposed action against this policy before it runs. No policy match means no action. For a step-by-step walkthrough of writing an operator against a live connector, with naming, guardrails, and receipts explained in full, see Your first operator.

5

Watch it act, then read the receipt

Run the operator once and tail its receipts. Each receipt is the immutable record of one action: what was proposed, the policy decision, and the outcome.

bash
fibric operators run ship-risk --once
fibric receipts tail --operator ship-risk
$ fibric operators run ship-risk --once sensed 42 open orders reasoned 3 at risk → proposed 3 holds disposed policy allow · within limit (3/25) · single-flight ok acted 3 holds placed, 3 owners notified $ fibric receipts tail --operator ship-risk receipt rc_5b21 order SO-10884 orders.hold applied policy=allow idem=ok receipt rc_5b22 order SO-10901 orders.hold applied policy=allow idem=ok receipt rc_5b23 order SO-10912 orders.hold applied policy=allow idem=ok

Open any receipt to see the full record: the envelope that triggered it, the proposed plan, the policy evaluation, and the idempotency key (ship-risk:SO-10884:hold) that guarantees the same action is never applied twice.

bash
fibric receipts show rc_5b21 --json

What just happened

You ran the full Fibric loop. The operator sensed through a connector, reasoned over what it saw and proposed a plan, and the deterministic executor checked that plan against your policy, running each action once, never twice, and leaving a receipt for every step. That is exactly the shape a production operation runs in; the only change is swapping the sandbox connector for a real one, bound to the same orders role, with your operator and policy unchanged.

Next steps