Business context for AI agents

Prefer to build hands-on? Here's the real sequence

Most people just tell Loxtep what agent they want. If you'd rather wire it in code, start from an empty directory and run the authenticated CLI lifecycle below. Requires Node.js 22+, a Loxtep account, an org domain, and a non-production instance.

This is a guided, read-only walkthrough — the terminal output below is illustrative and nothing here runs commands or connects to your account. To run it for real, install @loxtep/sdk@^0.9.16 (or newer) and follow the same commands in an empty directory. Full details ship in the template README.md after loxtep init --template shopify-orders.

loxtep — getting startedstep 01
npm i -g @loxtep/sdk@^0.9.16 && loxtep login
✓ Authenticated as you@company.com ✓ Wrote ./.loxtep/credentials.json
1npm

Requires Node.js 22+. Login stores a JWT locally. You also need an org domain and a non-production instance (loxtep instances list).

loxtep — getting startedstep 02
loxtep init --template shopify-orders
✓ Scaffolded .loxtep/project.json ✓ Created domains/ connectors/ workflows/ data-products/ ✓ workflows/orders-enricher.ts ✓ events/order-created.json ✓ Wrote AGENTS.md and .loxtep/skills/shopify-orders.yaml Next: loxtep attach → loxtep setup → loxtep generate
2loxtep init

Scaffolds a runnable sample: workflow module, event fixture, package/tsconfig, AGENTS.md, and a default skill. Empty workflows/ is no longer left behind.

loxtep — getting startedstep 03
loxtep attach --instance <non-prod-instance-id>
✓ Linked project to instance ✓ Wrote instance_id + api_url + streams to .loxtep/project.json
3loxtep attach

Bind a non-production instance. Prefer a shared/dev instance for validation — test performs live stream I/O.

loxtep — getting startedstep 04
loxtep setup
Using domain: commerce (…) Provisioning data product "orders_raw" (ingest create --deploy)… ✓ Created and deployed: orders_raw Provisioning data product "orders_enriched" (ingest create --deploy)… ✓ Created and deployed: orders_enriched Next: loxtep generate → test → deploy
4loxtep setup

Idempotent sample setup. Creates orders_raw and orders_enriched when missing (does not assume they already exist). Re-runs reuse existing products.

loxtep — getting startedstep 05
loxtep generate
Generated .loxtep/generated/index.ts: Data products: 2 Connectors: 1 Domains: 1 Queues: … Flows: … Workflows: …
5loxtep generate

Projects live data products, connectors, domains, and queues into typed constants. Counts reflect your org after setup — not fictional catalog sizes.

loxtep — getting startedstep 06
loxtep test orders-enricher --event ./events/order-created.json
▶ Running orders-enricher locally (live instance I/O) ⚠️ Guarded operation requires approval: Operation: dataProducts.write Target: orders_enriched Approve? (y/n, 300s timeout): y ─── Action Trace ─────────────────────────────────── ✓ [1] handler.start → orders-enricher [succeeded] ✓ [2] dataProducts.write → orders_enriched [succeeded] ✓ [3] handler.complete → orders-enricher [succeeded] ──────────────────────────────────────────────────── ✓ 1 event processed, 0 errors
6loxtep test

Local handler execution with live instance writes (not an offline simulation). requireApproval gates dataProducts.write; reject/timeout exits nonzero.

loxtep — getting startedstep 07
loxtep deploy
Compiling 1 module… ✓ Validating referenced resources… ✓ Creating orders-enricher ✓ ✓ Deploy queued · track: loxtep deployments get <run_id>
7loxtep deploy

Compiles the sample module and deploys it. A second deploy updates orders-enricher in place. No fictional extra workflows.

What test and deploy actually run

The sample workflow lives at workflows/orders-enricher.ts and imports typed constants from ../.loxtep/generated. The handler only writes to orders_enriched — there is no fictional queue read in the trace.

Guarded writes pause for approval. Reject or timeout exits nonzero so skipped work cannot look like a successful processed event.

workflows/orders-enricher.tstypescript
import { defineDataWorkflow, on } from '@loxtep/sdk'
import { workspace } from '../.loxtep/generated/index.js'

export default defineDataWorkflow({
  name: 'orders-enricher',
  triggers: [on.webhook('/shopify/orders')],
  requireApproval: ['dataProducts.write'],
  async handler(ctx, event) {
    const order = (event ?? {}) as Record<string, unknown>
    await ctx.toolbox!.dataProducts.write(
      workspace.dataProducts.orders_enriched,
      { ...order, enriched_at: new Date().toISOString(), source: 'orders-enricher' },
    )
  },
})

Stop wrestling with data plumbing. Start building on your company brain.

Join the waitlist for early access. Connect your tools, let Loxtep handle the context layer underneath, and ship knowledge agents your business can rely on — without an enterprise data team.

Enterprise-grade reliability, permissions, and audit trails — without the enterprise team.

Free to join — no credit card, no commitment