Repository files navigation

Sapiom SDK

License: MITTypeScript

⚠️Beta Status: Currently in v0.x (beta). API may change before v1.0.0. Production-ready and actively maintained.

TypeScript SDK for building, running, and operating AI agents on Sapiom. Author agents as typed step graphs, call Sapiom paid tools (sandboxes, git repos, coding models, search, file storage, …) directly from your code, and ship them to the Sapiom engine from the CLI, your coding agent's MCP, or the Sapiom Studio desktop app.

📦 Packages

This is a monorepo of focused packages. Install only what you need.

Build & run agents

PackageVersionDescription
@sapiom/agentnpmThe authoring contract: defineAgent, defineStep, directives (goto/terminate), and types
@sapiom/toolsnpmTyped client for Sapiom capabilities — the same tools your agents call, callable from your code
@sapiom/clinpmCommand line: scaffold, validate, deploy, and schedule agents
@sapiom/mcpnpmLocal developer MCP server (sapiom-dev) — build & operate agents from your coding agent

Agent Studio

Agent Studio runs your coding agent (Claude Code or Codex) in a Sapiom-configured environment: MCP pre-wired, agent projects tracked, one-click deploy/run, and a live canvas for previews.

PackageVersionDescription
@sapiom/agent-studionpmAgent Studio launcher — npx @sapiom/agent-studio@latest
@sapiom/harnessnpmThe Agent Studio implementation — a CLI-launched local web app
@sapiom/harness-desktopGitHub releaseSapiom Studio desktop app (Electron) — ships as signed installers, not to npm

Runtime internals

Lower-level packages that power the stack above. Most users never import these directly, but they're published for advanced/host integrations.

PackageVersionDescription
@sapiom/agent-corenpmPure, stateless functions for scaffolding, validating, and operating agents — shared by the CLI and MCP
@sapiom/agent-runtimenpmHost-agnostic graph-walker runtime — one runtime, two hosts (server engine + local runner)

🚀 Quick Start

New to Sapiom? The fastest path is the CLI or the developer MCP — both scaffold a working agent for you. See the examples folder for complete, runnable projects.

Scaffold an agent with the CLI

npx @sapiom/cli agents init my-app # scaffold a projectcd my-app
npx @sapiom/cli agents check # validate locally (bundle, manifest, graph)
npx @sapiom/cli agents deploy # build and ship

Build with your coding agent in Agent Studio

One command checks your environment, signs you in, and opens Agent Studio with your coding agent running in an embedded terminal:

npx @sapiom/agent-studio@latest [dir]

Prefer a native app? Sapiom Studio is the one-click desktop host for the same experience — download installers (macOS, Windows, Linux) from GitHub Releases.

Author an agent

An agent is a typed graph of steps. Each step does work and returns a directive telling the runtime where to go next.

import{defineAgent,defineStep,goto,terminate}from"@sapiom/agent";conststart=defineStep({name: "start",next: ["finish"],asyncrun(input,ctx){returngoto("finish",{greeting: `hello ${input.name}`});},});constfinish=defineStep({name: "finish",next: [],terminal: true,asyncrun(input){returnterminate({done: true, ...input});},});exportconsthello=defineAgent({name: "hello",entry: "start",steps: { start, finish },});

Call Sapiom capabilities from your code

@sapiom/tools exposes the same capabilities your agents call as tools, typed and authenticated to your tenant.

import{createClient}from"@sapiom/tools";constsapiom=createClient({apiKey: process.env.SAPIOM_API_KEY});// Create a repo, have a coding model build into it, then publish.constrepo=awaitsapiom.repositories.create("landing-page");construn=awaitsapiom.models.coding.run({task: "Build a one-page marketing site in index.html.",gitRepository: repo,});if(run.result?.success){const{ sha }=awaitrepo.pushFromSandbox(run.sandbox,{message: "build: landing",});console.log("published",sha);}

Build agents from your coding agent (MCP)

Add the local developer MCP so your coding agent can scaffold, test, deploy, and inspect Sapiom agents. In Claude Code:

claude mcp add sapiom-dev -- npx -y @sapiom/mcp

@sapiom/mcp is the local developer surface (sapiom_dev_*). It is distinct from the remote Sapiom capability MCP that services paid tool calls — see docs/mcp-servers.md for which to use when.

📚 Documentation

🏗️ Package Architecture

@sapiom/agent Authoring contract (defineAgent, directives, types)
↑
├── @sapiom/agent-runtime Host-agnostic graph-walker runtime
└── @sapiom/agent-core Scaffold / validate / operate (pure functions)
↑
├── @sapiom/cli Command line
└── @sapiom/mcp Local developer MCP (sapiom-dev)
@sapiom/tools Typed capability client (sandboxes, repos, models, …)
@sapiom/harness Agent Studio (local web app; launched via @sapiom/agent-studio)
↑
└── @sapiom/harness-desktop Sapiom Studio desktop app (Electron host, ships as installers)

🛠️ Development

This is a pnpm workspace monorepo.

# Install dependencies
pnpm install
# Build all packages
pnpm build
# Run tests
pnpm test# Lint and format
pnpm lint
pnpm format

Package Scripts

# Build / test a specific package
pnpm --filter @sapiom/agent build
pnpm --filter @sapiom/tools test# Watch mode
pnpm --filter @sapiom/agent dev

Publishing

We use Changesets for version management:

pnpm changeset # create a changeset
pnpm version-packages # apply version bumps
pnpm release # build and publish to npm

🤝 Contributing

Contributions welcome! Please read our Contributing Guide first — it explains which changes can go straight to a pull request (focused bug fixes, documentation corrections, single-template additions) and which need a maintainer-agreed issue before you invest in them (new features, public API changes, new dependencies, cross-package work).

In short:

  1. Fork the repository and branch from the latest main
  2. Keep the change focused on one problem, with tests for changed behavior
  3. Run the root checks (pnpm build, pnpm typecheck, pnpm lint, pnpm test)
  4. Add a changeset when a published package's behavior or API changes
  5. Open a pull request and complete every applicable section of the template

AI-assisted contributions are welcome but must be disclosed, reviewed, and validated by the contributor. For suspected security vulnerabilities, follow the Security Policy instead of opening a public issue.

📄 License

MIT © Sapiom

🔗 Links

About

TypeScript / Node libraries

Resources

Contributing

Security policy

Stars

19 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Sapiom SDK

License: MITTypeScript

⚠️Beta Status: Currently in v0.x (beta). API may change before v1.0.0. Production-ready and actively maintained.

TypeScript SDK for building, running, and operating AI agents on Sapiom. Author agents as typed step graphs, call Sapiom paid tools (sandboxes, git repos, coding models, search, file storage, …) directly from your code, and ship them to the Sapiom engine from the CLI, your coding agent's MCP, or the Sapiom Studio desktop app.

📦 Packages

This is a monorepo of focused packages. Install only what you need.

Build & run agents

PackageVersionDescription
@sapiom/agentnpmThe authoring contract: defineAgent, defineStep, directives (goto/terminate), and types
@sapiom/toolsnpmTyped client for Sapiom capabilities — the same tools your agents call, callable from your code
@sapiom/clinpmCommand line: scaffold, validate, deploy, and schedule agents
@sapiom/mcpnpmLocal developer MCP server (sapiom-dev) — build & operate agents from your coding agent

Agent Studio

Agent Studio runs your coding agent (Claude Code or Codex) in a Sapiom-configured environment: MCP pre-wired, agent projects tracked, one-click deploy/run, and a live canvas for previews.

PackageVersionDescription
@sapiom/agent-studionpmAgent Studio launcher — npx @sapiom/agent-studio@latest
@sapiom/harnessnpmThe Agent Studio implementation — a CLI-launched local web app
@sapiom/harness-desktopGitHub releaseSapiom Studio desktop app (Electron) — ships as signed installers, not to npm

Runtime internals

Lower-level packages that power the stack above. Most users never import these directly, but they're published for advanced/host integrations.

PackageVersionDescription
@sapiom/agent-corenpmPure, stateless functions for scaffolding, validating, and operating agents — shared by the CLI and MCP
@sapiom/agent-runtimenpmHost-agnostic graph-walker runtime — one runtime, two hosts (server engine + local runner)

🚀 Quick Start

New to Sapiom? The fastest path is the CLI or the developer MCP — both scaffold a working agent for you. See the examples folder for complete, runnable projects.

Scaffold an agent with the CLI

npx @sapiom/cli agents init my-app # scaffold a projectcd my-app
npx @sapiom/cli agents check # validate locally (bundle, manifest, graph)
npx @sapiom/cli agents deploy # build and ship

Build with your coding agent in Agent Studio

One command checks your environment, signs you in, and opens Agent Studio with your coding agent running in an embedded terminal:

npx @sapiom/agent-studio@latest [dir]

Prefer a native app? Sapiom Studio is the one-click desktop host for the same experience — download installers (macOS, Windows, Linux) from GitHub Releases.

Author an agent

An agent is a typed graph of steps. Each step does work and returns a directive telling the runtime where to go next.

import{defineAgent,defineStep,goto,terminate}from"@sapiom/agent";conststart=defineStep({name: "start",next: ["finish"],asyncrun(input,ctx){returngoto("finish",{greeting: `hello ${input.name}`});},});constfinish=defineStep({name: "finish",next: [],terminal: true,asyncrun(input){returnterminate({done: true, ...input});},});exportconsthello=defineAgent({name: "hello",entry: "start",steps: { start, finish },});

Call Sapiom capabilities from your code

@sapiom/tools exposes the same capabilities your agents call as tools, typed and authenticated to your tenant.

import{createClient}from"@sapiom/tools";constsapiom=createClient({apiKey: process.env.SAPIOM_API_KEY});// Create a repo, have a coding model build into it, then publish.constrepo=awaitsapiom.repositories.create("landing-page");construn=awaitsapiom.models.coding.run({task: "Build a one-page marketing site in index.html.",gitRepository: repo,});if(run.result?.success){const{ sha }=awaitrepo.pushFromSandbox(run.sandbox,{message: "build: landing",});console.log("published",sha);}

Build agents from your coding agent (MCP)

Add the local developer MCP so your coding agent can scaffold, test, deploy, and inspect Sapiom agents. In Claude Code:

claude mcp add sapiom-dev -- npx -y @sapiom/mcp

@sapiom/mcp is the local developer surface (sapiom_dev_*). It is distinct from the remote Sapiom capability MCP that services paid tool calls — see docs/mcp-servers.md for which to use when.

📚 Documentation

🏗️ Package Architecture

@sapiom/agent Authoring contract (defineAgent, directives, types)
↑
├── @sapiom/agent-runtime Host-agnostic graph-walker runtime
└── @sapiom/agent-core Scaffold / validate / operate (pure functions)
↑
├── @sapiom/cli Command line
└── @sapiom/mcp Local developer MCP (sapiom-dev)
@sapiom/tools Typed capability client (sandboxes, repos, models, …)
@sapiom/harness Agent Studio (local web app; launched via @sapiom/agent-studio)
↑
└── @sapiom/harness-desktop Sapiom Studio desktop app (Electron host, ships as installers)

🛠️ Development

This is a pnpm workspace monorepo.

# Install dependencies
pnpm install
# Build all packages
pnpm build
# Run tests
pnpm test# Lint and format
pnpm lint
pnpm format

Package Scripts

# Build / test a specific package
pnpm --filter @sapiom/agent build
pnpm --filter @sapiom/tools test# Watch mode
pnpm --filter @sapiom/agent dev

Publishing

We use Changesets for version management:

pnpm changeset # create a changeset
pnpm version-packages # apply version bumps
pnpm release # build and publish to npm

🤝 Contributing

Contributions welcome! Please read our Contributing Guide first — it explains which changes can go straight to a pull request (focused bug fixes, documentation corrections, single-template additions) and which need a maintainer-agreed issue before you invest in them (new features, public API changes, new dependencies, cross-package work).

In short:

  1. Fork the repository and branch from the latest main
  2. Keep the change focused on one problem, with tests for changed behavior
  3. Run the root checks (pnpm build, pnpm typecheck, pnpm lint, pnpm test)
  4. Add a changeset when a published package's behavior or API changes
  5. Open a pull request and complete every applicable section of the template

AI-assisted contributions are welcome but must be disclosed, reviewed, and validated by the contributor. For suspected security vulnerabilities, follow the Security Policy instead of opening a public issue.

📄 License

MIT © Sapiom

🔗 Links

About

TypeScript / Node libraries

Resources

Contributing

Security policy

Stars

19 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Sapiom SDK

License: MITTypeScript

⚠️Beta Status: Currently in v0.x (beta). API may change before v1.0.0. Production-ready and actively maintained.

TypeScript SDK for building, running, and operating AI agents on Sapiom. Author agents as typed step graphs, call Sapiom paid tools (sandboxes, git repos, coding models, search, file storage, …) directly from your code, and ship them to the Sapiom engine from the CLI, your coding agent's MCP, or the Sapiom Studio desktop app.

📦 Packages

This is a monorepo of focused packages. Install only what you need.

Build & run agents

PackageVersionDescription
@sapiom/agentnpmThe authoring contract: defineAgent, defineStep, directives (goto/terminate), and types
@sapiom/toolsnpmTyped client for Sapiom capabilities — the same tools your agents call, callable from your code
@sapiom/clinpmCommand line: scaffold, validate, deploy, and schedule agents
@sapiom/mcpnpmLocal developer MCP server (sapiom-dev) — build & operate agents from your coding agent

Agent Studio

Agent Studio runs your coding agent (Claude Code or Codex) in a Sapiom-configured environment: MCP pre-wired, agent projects tracked, one-click deploy/run, and a live canvas for previews.

PackageVersionDescription
@sapiom/agent-studionpmAgent Studio launcher — npx @sapiom/agent-studio@latest
@sapiom/harnessnpmThe Agent Studio implementation — a CLI-launched local web app
@sapiom/harness-desktopGitHub releaseSapiom Studio desktop app (Electron) — ships as signed installers, not to npm

Runtime internals

Lower-level packages that power the stack above. Most users never import these directly, but they're published for advanced/host integrations.

PackageVersionDescription
@sapiom/agent-corenpmPure, stateless functions for scaffolding, validating, and operating agents — shared by the CLI and MCP
@sapiom/agent-runtimenpmHost-agnostic graph-walker runtime — one runtime, two hosts (server engine + local runner)

🚀 Quick Start

New to Sapiom? The fastest path is the CLI or the developer MCP — both scaffold a working agent for you. See the examples folder for complete, runnable projects.

Scaffold an agent with the CLI

npx @sapiom/cli agents init my-app # scaffold a projectcd my-app
npx @sapiom/cli agents check # validate locally (bundle, manifest, graph)
npx @sapiom/cli agents deploy # build and ship

Build with your coding agent in Agent Studio

One command checks your environment, signs you in, and opens Agent Studio with your coding agent running in an embedded terminal:

npx @sapiom/agent-studio@latest [dir]

Prefer a native app? Sapiom Studio is the one-click desktop host for the same experience — download installers (macOS, Windows, Linux) from GitHub Releases.

Author an agent

An agent is a typed graph of steps. Each step does work and returns a directive telling the runtime where to go next.

import{defineAgent,defineStep,goto,terminate}from"@sapiom/agent";conststart=defineStep({name: "start",next: ["finish"],asyncrun(input,ctx){returngoto("finish",{greeting: `hello ${input.name}`});},});constfinish=defineStep({name: "finish",next: [],terminal: true,asyncrun(input){returnterminate({done: true, ...input});},});exportconsthello=defineAgent({name: "hello",entry: "start",steps: { start, finish },});

Call Sapiom capabilities from your code

@sapiom/tools exposes the same capabilities your agents call as tools, typed and authenticated to your tenant.

import{createClient}from"@sapiom/tools";constsapiom=createClient({apiKey: process.env.SAPIOM_API_KEY});// Create a repo, have a coding model build into it, then publish.constrepo=awaitsapiom.repositories.create("landing-page");construn=awaitsapiom.models.coding.run({task: "Build a one-page marketing site in index.html.",gitRepository: repo,});if(run.result?.success){const{ sha }=awaitrepo.pushFromSandbox(run.sandbox,{message: "build: landing",});console.log("published",sha);}

Build agents from your coding agent (MCP)

Add the local developer MCP so your coding agent can scaffold, test, deploy, and inspect Sapiom agents. In Claude Code:

claude mcp add sapiom-dev -- npx -y @sapiom/mcp

@sapiom/mcp is the local developer surface (sapiom_dev_*). It is distinct from the remote Sapiom capability MCP that services paid tool calls — see docs/mcp-servers.md for which to use when.

📚 Documentation

🏗️ Package Architecture

@sapiom/agent Authoring contract (defineAgent, directives, types)
↑
├── @sapiom/agent-runtime Host-agnostic graph-walker runtime
└── @sapiom/agent-core Scaffold / validate / operate (pure functions)
↑
├── @sapiom/cli Command line
└── @sapiom/mcp Local developer MCP (sapiom-dev)
@sapiom/tools Typed capability client (sandboxes, repos, models, …)
@sapiom/harness Agent Studio (local web app; launched via @sapiom/agent-studio)
↑
└── @sapiom/harness-desktop Sapiom Studio desktop app (Electron host, ships as installers)

🛠️ Development

This is a pnpm workspace monorepo.

# Install dependencies
pnpm install
# Build all packages
pnpm build
# Run tests
pnpm test# Lint and format
pnpm lint
pnpm format

Package Scripts

# Build / test a specific package
pnpm --filter @sapiom/agent build
pnpm --filter @sapiom/tools test# Watch mode
pnpm --filter @sapiom/agent dev

Publishing

We use Changesets for version management:

pnpm changeset # create a changeset
pnpm version-packages # apply version bumps
pnpm release # build and publish to npm

🤝 Contributing

Contributions welcome! Please read our Contributing Guide first — it explains which changes can go straight to a pull request (focused bug fixes, documentation corrections, single-template additions) and which need a maintainer-agreed issue before you invest in them (new features, public API changes, new dependencies, cross-package work).

In short:

  1. Fork the repository and branch from the latest main
  2. Keep the change focused on one problem, with tests for changed behavior
  3. Run the root checks (pnpm build, pnpm typecheck, pnpm lint, pnpm test)
  4. Add a changeset when a published package's behavior or API changes
  5. Open a pull request and complete every applicable section of the template

AI-assisted contributions are welcome but must be disclosed, reviewed, and validated by the contributor. For suspected security vulnerabilities, follow the Security Policy instead of opening a public issue.

📄 License

MIT © Sapiom

🔗 Links

About

TypeScript / Node libraries

Resources

Contributing

Security policy

Stars

19 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Sapiom SDK

License: MITTypeScript

⚠️Beta Status: Currently in v0.x (beta). API may change before v1.0.0. Production-ready and actively maintained.

TypeScript SDK for building, running, and operating AI agents on Sapiom. Author agents as typed step graphs, call Sapiom paid tools (sandboxes, git repos, coding models, search, file storage, …) directly from your code, and ship them to the Sapiom engine from the CLI, your coding agent's MCP, or the Sapiom Studio desktop app.

📦 Packages

This is a monorepo of focused packages. Install only what you need.

Build & run agents

PackageVersionDescription
@sapiom/agentnpmThe authoring contract: defineAgent, defineStep, directives (goto/terminate), and types
@sapiom/toolsnpmTyped client for Sapiom capabilities — the same tools your agents call, callable from your code
@sapiom/clinpmCommand line: scaffold, validate, deploy, and schedule agents
@sapiom/mcpnpmLocal developer MCP server (sapiom-dev) — build & operate agents from your coding agent

Agent Studio

Agent Studio runs your coding agent (Claude Code or Codex) in a Sapiom-configured environment: MCP pre-wired, agent projects tracked, one-click deploy/run, and a live canvas for previews.

PackageVersionDescription
@sapiom/agent-studionpmAgent Studio launcher — npx @sapiom/agent-studio@latest
@sapiom/harnessnpmThe Agent Studio implementation — a CLI-launched local web app
@sapiom/harness-desktopGitHub releaseSapiom Studio desktop app (Electron) — ships as signed installers, not to npm

Runtime internals

Lower-level packages that power the stack above. Most users never import these directly, but they're published for advanced/host integrations.

PackageVersionDescription
@sapiom/agent-corenpmPure, stateless functions for scaffolding, validating, and operating agents — shared by the CLI and MCP
@sapiom/agent-runtimenpmHost-agnostic graph-walker runtime — one runtime, two hosts (server engine + local runner)

🚀 Quick Start

New to Sapiom? The fastest path is the CLI or the developer MCP — both scaffold a working agent for you. See the examples folder for complete, runnable projects.

Scaffold an agent with the CLI

npx @sapiom/cli agents init my-app # scaffold a projectcd my-app
npx @sapiom/cli agents check # validate locally (bundle, manifest, graph)
npx @sapiom/cli agents deploy # build and ship

Build with your coding agent in Agent Studio

One command checks your environment, signs you in, and opens Agent Studio with your coding agent running in an embedded terminal:

npx @sapiom/agent-studio@latest [dir]

Prefer a native app? Sapiom Studio is the one-click desktop host for the same experience — download installers (macOS, Windows, Linux) from GitHub Releases.

Author an agent

An agent is a typed graph of steps. Each step does work and returns a directive telling the runtime where to go next.

import{defineAgent,defineStep,goto,terminate}from"@sapiom/agent";conststart=defineStep({name: "start",next: ["finish"],asyncrun(input,ctx){returngoto("finish",{greeting: `hello ${input.name}`});},});constfinish=defineStep({name: "finish",next: [],terminal: true,asyncrun(input){returnterminate({done: true, ...input});},});exportconsthello=defineAgent({name: "hello",entry: "start",steps: { start, finish },});

Call Sapiom capabilities from your code

@sapiom/tools exposes the same capabilities your agents call as tools, typed and authenticated to your tenant.

import{createClient}from"@sapiom/tools";constsapiom=createClient({apiKey: process.env.SAPIOM_API_KEY});// Create a repo, have a coding model build into it, then publish.constrepo=awaitsapiom.repositories.create("landing-page");construn=awaitsapiom.models.coding.run({task: "Build a one-page marketing site in index.html.",gitRepository: repo,});if(run.result?.success){const{ sha }=awaitrepo.pushFromSandbox(run.sandbox,{message: "build: landing",});console.log("published",sha);}

Build agents from your coding agent (MCP)

Add the local developer MCP so your coding agent can scaffold, test, deploy, and inspect Sapiom agents. In Claude Code:

claude mcp add sapiom-dev -- npx -y @sapiom/mcp

@sapiom/mcp is the local developer surface (sapiom_dev_*). It is distinct from the remote Sapiom capability MCP that services paid tool calls — see docs/mcp-servers.md for which to use when.

📚 Documentation

🏗️ Package Architecture

@sapiom/agent Authoring contract (defineAgent, directives, types)
↑
├── @sapiom/agent-runtime Host-agnostic graph-walker runtime
└── @sapiom/agent-core Scaffold / validate / operate (pure functions)
↑
├── @sapiom/cli Command line
└── @sapiom/mcp Local developer MCP (sapiom-dev)
@sapiom/tools Typed capability client (sandboxes, repos, models, …)
@sapiom/harness Agent Studio (local web app; launched via @sapiom/agent-studio)
↑
└── @sapiom/harness-desktop Sapiom Studio desktop app (Electron host, ships as installers)

🛠️ Development

This is a pnpm workspace monorepo.

# Install dependencies
pnpm install
# Build all packages
pnpm build
# Run tests
pnpm test# Lint and format
pnpm lint
pnpm format

Package Scripts

# Build / test a specific package
pnpm --filter @sapiom/agent build
pnpm --filter @sapiom/tools test# Watch mode
pnpm --filter @sapiom/agent dev

Publishing

We use Changesets for version management:

pnpm changeset # create a changeset
pnpm version-packages # apply version bumps
pnpm release # build and publish to npm

🤝 Contributing

Contributions welcome! Please read our Contributing Guide first — it explains which changes can go straight to a pull request (focused bug fixes, documentation corrections, single-template additions) and which need a maintainer-agreed issue before you invest in them (new features, public API changes, new dependencies, cross-package work).

In short:

  1. Fork the repository and branch from the latest main
  2. Keep the change focused on one problem, with tests for changed behavior
  3. Run the root checks (pnpm build, pnpm typecheck, pnpm lint, pnpm test)
  4. Add a changeset when a published package's behavior or API changes
  5. Open a pull request and complete every applicable section of the template

AI-assisted contributions are welcome but must be disclosed, reviewed, and validated by the contributor. For suspected security vulnerabilities, follow the Security Policy instead of opening a public issue.

📄 License

MIT © Sapiom

🔗 Links

About

TypeScript / Node libraries

Resources

Contributing

Security policy

Stars

19 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Sapiom SDK

License: MITTypeScript

⚠️Beta Status: Currently in v0.x (beta). API may change before v1.0.0. Production-ready and actively maintained.

TypeScript SDK for building, running, and operating AI agents on Sapiom. Author agents as typed step graphs, call Sapiom paid tools (sandboxes, git repos, coding models, search, file storage, …) directly from your code, and ship them to the Sapiom engine from the CLI, your coding agent's MCP, or the Sapiom Studio desktop app.

📦 Packages

This is a monorepo of focused packages. Install only what you need.

Build & run agents

PackageVersionDescription
@sapiom/agentnpmThe authoring contract: defineAgent, defineStep, directives (goto/terminate), and types
@sapiom/toolsnpmTyped client for Sapiom capabilities — the same tools your agents call, callable from your code
@sapiom/clinpmCommand line: scaffold, validate, deploy, and schedule agents
@sapiom/mcpnpmLocal developer MCP server (sapiom-dev) — build & operate agents from your coding agent

Agent Studio

Agent Studio runs your coding agent (Claude Code or Codex) in a Sapiom-configured environment: MCP pre-wired, agent projects tracked, one-click deploy/run, and a live canvas for previews.

PackageVersionDescription
@sapiom/agent-studionpmAgent Studio launcher — npx @sapiom/agent-studio@latest
@sapiom/harnessnpmThe Agent Studio implementation — a CLI-launched local web app
@sapiom/harness-desktopGitHub releaseSapiom Studio desktop app (Electron) — ships as signed installers, not to npm

Runtime internals

Lower-level packages that power the stack above. Most users never import these directly, but they're published for advanced/host integrations.

PackageVersionDescription
@sapiom/agent-corenpmPure, stateless functions for scaffolding, validating, and operating agents — shared by the CLI and MCP
@sapiom/agent-runtimenpmHost-agnostic graph-walker runtime — one runtime, two hosts (server engine + local runner)

🚀 Quick Start

New to Sapiom? The fastest path is the CLI or the developer MCP — both scaffold a working agent for you. See the examples folder for complete, runnable projects.

Scaffold an agent with the CLI

npx @sapiom/cli agents init my-app # scaffold a projectcd my-app
npx @sapiom/cli agents check # validate locally (bundle, manifest, graph)
npx @sapiom/cli agents deploy # build and ship

Build with your coding agent in Agent Studio

One command checks your environment, signs you in, and opens Agent Studio with your coding agent running in an embedded terminal:

npx @sapiom/agent-studio@latest [dir]

Prefer a native app? Sapiom Studio is the one-click desktop host for the same experience — download installers (macOS, Windows, Linux) from GitHub Releases.

Author an agent

An agent is a typed graph of steps. Each step does work and returns a directive telling the runtime where to go next.

import{defineAgent,defineStep,goto,terminate}from"@sapiom/agent";conststart=defineStep({name: "start",next: ["finish"],asyncrun(input,ctx){returngoto("finish",{greeting: `hello ${input.name}`});},});constfinish=defineStep({name: "finish",next: [],terminal: true,asyncrun(input){returnterminate({done: true, ...input});},});exportconsthello=defineAgent({name: "hello",entry: "start",steps: { start, finish },});

Call Sapiom capabilities from your code

@sapiom/tools exposes the same capabilities your agents call as tools, typed and authenticated to your tenant.

import{createClient}from"@sapiom/tools";constsapiom=createClient({apiKey: process.env.SAPIOM_API_KEY});// Create a repo, have a coding model build into it, then publish.constrepo=awaitsapiom.repositories.create("landing-page");construn=awaitsapiom.models.coding.run({task: "Build a one-page marketing site in index.html.",gitRepository: repo,});if(run.result?.success){const{ sha }=awaitrepo.pushFromSandbox(run.sandbox,{message: "build: landing",});console.log("published",sha);}

Build agents from your coding agent (MCP)

Add the local developer MCP so your coding agent can scaffold, test, deploy, and inspect Sapiom agents. In Claude Code:

claude mcp add sapiom-dev -- npx -y @sapiom/mcp

@sapiom/mcp is the local developer surface (sapiom_dev_*). It is distinct from the remote Sapiom capability MCP that services paid tool calls — see docs/mcp-servers.md for which to use when.

📚 Documentation

🏗️ Package Architecture

@sapiom/agent Authoring contract (defineAgent, directives, types)
↑
├── @sapiom/agent-runtime Host-agnostic graph-walker runtime
└── @sapiom/agent-core Scaffold / validate / operate (pure functions)
↑
├── @sapiom/cli Command line
└── @sapiom/mcp Local developer MCP (sapiom-dev)
@sapiom/tools Typed capability client (sandboxes, repos, models, …)
@sapiom/harness Agent Studio (local web app; launched via @sapiom/agent-studio)
↑
└── @sapiom/harness-desktop Sapiom Studio desktop app (Electron host, ships as installers)

🛠️ Development

This is a pnpm workspace monorepo.

# Install dependencies
pnpm install
# Build all packages
pnpm build
# Run tests
pnpm test# Lint and format
pnpm lint
pnpm format

Package Scripts

# Build / test a specific package
pnpm --filter @sapiom/agent build
pnpm --filter @sapiom/tools test# Watch mode
pnpm --filter @sapiom/agent dev

Publishing

We use Changesets for version management:

pnpm changeset # create a changeset
pnpm version-packages # apply version bumps
pnpm release # build and publish to npm

🤝 Contributing

Contributions welcome! Please read our Contributing Guide first — it explains which changes can go straight to a pull request (focused bug fixes, documentation corrections, single-template additions) and which need a maintainer-agreed issue before you invest in them (new features, public API changes, new dependencies, cross-package work).

In short:

  1. Fork the repository and branch from the latest main
  2. Keep the change focused on one problem, with tests for changed behavior
  3. Run the root checks (pnpm build, pnpm typecheck, pnpm lint, pnpm test)
  4. Add a changeset when a published package's behavior or API changes
  5. Open a pull request and complete every applicable section of the template

AI-assisted contributions are welcome but must be disclosed, reviewed, and validated by the contributor. For suspected security vulnerabilities, follow the Security Policy instead of opening a public issue.

📄 License

MIT © Sapiom

🔗 Links

About

TypeScript / Node libraries

Resources

Contributing

Security policy

Stars

19 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Sapiom SDK

License: MITTypeScript

⚠️Beta Status: Currently in v0.x (beta). API may change before v1.0.0. Production-ready and actively maintained.

TypeScript SDK for building, running, and operating AI agents on Sapiom. Author agents as typed step graphs, call Sapiom paid tools (sandboxes, git repos, coding models, search, file storage, …) directly from your code, and ship them to the Sapiom engine from the CLI, your coding agent's MCP, or the Sapiom Studio desktop app.

📦 Packages

This is a monorepo of focused packages. Install only what you need.

Build & run agents

PackageVersionDescription
@sapiom/agentnpmThe authoring contract: defineAgent, defineStep, directives (goto/terminate), and types
@sapiom/toolsnpmTyped client for Sapiom capabilities — the same tools your agents call, callable from your code
@sapiom/clinpmCommand line: scaffold, validate, deploy, and schedule agents
@sapiom/mcpnpmLocal developer MCP server (sapiom-dev) — build & operate agents from your coding agent

Agent Studio

Agent Studio runs your coding agent (Claude Code or Codex) in a Sapiom-configured environment: MCP pre-wired, agent projects tracked, one-click deploy/run, and a live canvas for previews.

PackageVersionDescription
@sapiom/agent-studionpmAgent Studio launcher — npx @sapiom/agent-studio@latest
@sapiom/harnessnpmThe Agent Studio implementation — a CLI-launched local web app
@sapiom/harness-desktopGitHub releaseSapiom Studio desktop app (Electron) — ships as signed installers, not to npm

Runtime internals

Lower-level packages that power the stack above. Most users never import these directly, but they're published for advanced/host integrations.

PackageVersionDescription
@sapiom/agent-corenpmPure, stateless functions for scaffolding, validating, and operating agents — shared by the CLI and MCP
@sapiom/agent-runtimenpmHost-agnostic graph-walker runtime — one runtime, two hosts (server engine + local runner)

🚀 Quick Start

New to Sapiom? The fastest path is the CLI or the developer MCP — both scaffold a working agent for you. See the examples folder for complete, runnable projects.

Scaffold an agent with the CLI

npx @sapiom/cli agents init my-app # scaffold a projectcd my-app
npx @sapiom/cli agents check # validate locally (bundle, manifest, graph)
npx @sapiom/cli agents deploy # build and ship

Build with your coding agent in Agent Studio

One command checks your environment, signs you in, and opens Agent Studio with your coding agent running in an embedded terminal:

npx @sapiom/agent-studio@latest [dir]

Prefer a native app? Sapiom Studio is the one-click desktop host for the same experience — download installers (macOS, Windows, Linux) from GitHub Releases.

Author an agent

An agent is a typed graph of steps. Each step does work and returns a directive telling the runtime where to go next.

import{defineAgent,defineStep,goto,terminate}from"@sapiom/agent";conststart=defineStep({name: "start",next: ["finish"],asyncrun(input,ctx){returngoto("finish",{greeting: `hello ${input.name}`});},});constfinish=defineStep({name: "finish",next: [],terminal: true,asyncrun(input){returnterminate({done: true, ...input});},});exportconsthello=defineAgent({name: "hello",entry: "start",steps: { start, finish },});

Call Sapiom capabilities from your code

@sapiom/tools exposes the same capabilities your agents call as tools, typed and authenticated to your tenant.

import{createClient}from"@sapiom/tools";constsapiom=createClient({apiKey: process.env.SAPIOM_API_KEY});// Create a repo, have a coding model build into it, then publish.constrepo=awaitsapiom.repositories.create("landing-page");construn=awaitsapiom.models.coding.run({task: "Build a one-page marketing site in index.html.",gitRepository: repo,});if(run.result?.success){const{ sha }=awaitrepo.pushFromSandbox(run.sandbox,{message: "build: landing",});console.log("published",sha);}

Build agents from your coding agent (MCP)

Add the local developer MCP so your coding agent can scaffold, test, deploy, and inspect Sapiom agents. In Claude Code:

claude mcp add sapiom-dev -- npx -y @sapiom/mcp

@sapiom/mcp is the local developer surface (sapiom_dev_*). It is distinct from the remote Sapiom capability MCP that services paid tool calls — see docs/mcp-servers.md for which to use when.

📚 Documentation

🏗️ Package Architecture

@sapiom/agent Authoring contract (defineAgent, directives, types)
↑
├── @sapiom/agent-runtime Host-agnostic graph-walker runtime
└── @sapiom/agent-core Scaffold / validate / operate (pure functions)
↑
├── @sapiom/cli Command line
└── @sapiom/mcp Local developer MCP (sapiom-dev)
@sapiom/tools Typed capability client (sandboxes, repos, models, …)
@sapiom/harness Agent Studio (local web app; launched via @sapiom/agent-studio)
↑
└── @sapiom/harness-desktop Sapiom Studio desktop app (Electron host, ships as installers)

🛠️ Development

This is a pnpm workspace monorepo.

# Install dependencies
pnpm install
# Build all packages
pnpm build
# Run tests
pnpm test# Lint and format
pnpm lint
pnpm format

Package Scripts

# Build / test a specific package
pnpm --filter @sapiom/agent build
pnpm --filter @sapiom/tools test# Watch mode
pnpm --filter @sapiom/agent dev

Publishing

We use Changesets for version management:

pnpm changeset # create a changeset
pnpm version-packages # apply version bumps
pnpm release # build and publish to npm

🤝 Contributing

Contributions welcome! Please read our Contributing Guide first — it explains which changes can go straight to a pull request (focused bug fixes, documentation corrections, single-template additions) and which need a maintainer-agreed issue before you invest in them (new features, public API changes, new dependencies, cross-package work).

In short:

  1. Fork the repository and branch from the latest main
  2. Keep the change focused on one problem, with tests for changed behavior
  3. Run the root checks (pnpm build, pnpm typecheck, pnpm lint, pnpm test)
  4. Add a changeset when a published package's behavior or API changes
  5. Open a pull request and complete every applicable section of the template

AI-assisted contributions are welcome but must be disclosed, reviewed, and validated by the contributor. For suspected security vulnerabilities, follow the Security Policy instead of opening a public issue.

📄 License

MIT © Sapiom

🔗 Links

About

TypeScript / Node libraries

Resources

Contributing

Security policy

Stars

19 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Sapiom SDK

License: MITTypeScript

⚠️Beta Status: Currently in v0.x (beta). API may change before v1.0.0. Production-ready and actively maintained.

TypeScript SDK for building, running, and operating AI agents on Sapiom. Author agents as typed step graphs, call Sapiom paid tools (sandboxes, git repos, coding models, search, file storage, …) directly from your code, and ship them to the Sapiom engine from the CLI, your coding agent's MCP, or the Sapiom Studio desktop app.

📦 Packages

This is a monorepo of focused packages. Install only what you need.

Build & run agents

PackageVersionDescription
@sapiom/agentnpmThe authoring contract: defineAgent, defineStep, directives (goto/terminate), and types
@sapiom/toolsnpmTyped client for Sapiom capabilities — the same tools your agents call, callable from your code
@sapiom/clinpmCommand line: scaffold, validate, deploy, and schedule agents
@sapiom/mcpnpmLocal developer MCP server (sapiom-dev) — build & operate agents from your coding agent

Agent Studio

Agent Studio runs your coding agent (Claude Code or Codex) in a Sapiom-configured environment: MCP pre-wired, agent projects tracked, one-click deploy/run, and a live canvas for previews.

PackageVersionDescription
@sapiom/agent-studionpmAgent Studio launcher — npx @sapiom/agent-studio@latest
@sapiom/harnessnpmThe Agent Studio implementation — a CLI-launched local web app
@sapiom/harness-desktopGitHub releaseSapiom Studio desktop app (Electron) — ships as signed installers, not to npm

Runtime internals

Lower-level packages that power the stack above. Most users never import these directly, but they're published for advanced/host integrations.

PackageVersionDescription
@sapiom/agent-corenpmPure, stateless functions for scaffolding, validating, and operating agents — shared by the CLI and MCP
@sapiom/agent-runtimenpmHost-agnostic graph-walker runtime — one runtime, two hosts (server engine + local runner)

🚀 Quick Start

New to Sapiom? The fastest path is the CLI or the developer MCP — both scaffold a working agent for you. See the examples folder for complete, runnable projects.

Scaffold an agent with the CLI

npx @sapiom/cli agents init my-app # scaffold a projectcd my-app
npx @sapiom/cli agents check # validate locally (bundle, manifest, graph)
npx @sapiom/cli agents deploy # build and ship

Build with your coding agent in Agent Studio

One command checks your environment, signs you in, and opens Agent Studio with your coding agent running in an embedded terminal:

npx @sapiom/agent-studio@latest [dir]

Prefer a native app? Sapiom Studio is the one-click desktop host for the same experience — download installers (macOS, Windows, Linux) from GitHub Releases.

Author an agent

An agent is a typed graph of steps. Each step does work and returns a directive telling the runtime where to go next.

import{defineAgent,defineStep,goto,terminate}from"@sapiom/agent";conststart=defineStep({name: "start",next: ["finish"],asyncrun(input,ctx){returngoto("finish",{greeting: `hello ${input.name}`});},});constfinish=defineStep({name: "finish",next: [],terminal: true,asyncrun(input){returnterminate({done: true, ...input});},});exportconsthello=defineAgent({name: "hello",entry: "start",steps: { start, finish },});

Call Sapiom capabilities from your code

@sapiom/tools exposes the same capabilities your agents call as tools, typed and authenticated to your tenant.

import{createClient}from"@sapiom/tools";constsapiom=createClient({apiKey: process.env.SAPIOM_API_KEY});// Create a repo, have a coding model build into it, then publish.constrepo=awaitsapiom.repositories.create("landing-page");construn=awaitsapiom.models.coding.run({task: "Build a one-page marketing site in index.html.",gitRepository: repo,});if(run.result?.success){const{ sha }=awaitrepo.pushFromSandbox(run.sandbox,{message: "build: landing",});console.log("published",sha);}

Build agents from your coding agent (MCP)

Add the local developer MCP so your coding agent can scaffold, test, deploy, and inspect Sapiom agents. In Claude Code:

claude mcp add sapiom-dev -- npx -y @sapiom/mcp

@sapiom/mcp is the local developer surface (sapiom_dev_*). It is distinct from the remote Sapiom capability MCP that services paid tool calls — see docs/mcp-servers.md for which to use when.

📚 Documentation

🏗️ Package Architecture

@sapiom/agent Authoring contract (defineAgent, directives, types)
↑
├── @sapiom/agent-runtime Host-agnostic graph-walker runtime
└── @sapiom/agent-core Scaffold / validate / operate (pure functions)
↑
├── @sapiom/cli Command line
└── @sapiom/mcp Local developer MCP (sapiom-dev)
@sapiom/tools Typed capability client (sandboxes, repos, models, …)
@sapiom/harness Agent Studio (local web app; launched via @sapiom/agent-studio)
↑
└── @sapiom/harness-desktop Sapiom Studio desktop app (Electron host, ships as installers)

🛠️ Development

This is a pnpm workspace monorepo.

# Install dependencies
pnpm install
# Build all packages
pnpm build
# Run tests
pnpm test# Lint and format
pnpm lint
pnpm format

Package Scripts

# Build / test a specific package
pnpm --filter @sapiom/agent build
pnpm --filter @sapiom/tools test# Watch mode
pnpm --filter @sapiom/agent dev

Publishing

We use Changesets for version management:

pnpm changeset # create a changeset
pnpm version-packages # apply version bumps
pnpm release # build and publish to npm

🤝 Contributing

Contributions welcome! Please read our Contributing Guide first — it explains which changes can go straight to a pull request (focused bug fixes, documentation corrections, single-template additions) and which need a maintainer-agreed issue before you invest in them (new features, public API changes, new dependencies, cross-package work).

In short:

  1. Fork the repository and branch from the latest main
  2. Keep the change focused on one problem, with tests for changed behavior
  3. Run the root checks (pnpm build, pnpm typecheck, pnpm lint, pnpm test)
  4. Add a changeset when a published package's behavior or API changes
  5. Open a pull request and complete every applicable section of the template

AI-assisted contributions are welcome but must be disclosed, reviewed, and validated by the contributor. For suspected security vulnerabilities, follow the Security Policy instead of opening a public issue.

📄 License

MIT © Sapiom

🔗 Links

About

TypeScript / Node libraries

Resources

Contributing

Security policy

Stars

19 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Sapiom SDK

License: MITTypeScript

⚠️Beta Status: Currently in v0.x (beta). API may change before v1.0.0. Production-ready and actively maintained.

TypeScript SDK for building, running, and operating AI agents on Sapiom. Author agents as typed step graphs, call Sapiom paid tools (sandboxes, git repos, coding models, search, file storage, …) directly from your code, and ship them to the Sapiom engine from the CLI, your coding agent's MCP, or the Sapiom Studio desktop app.

📦 Packages

This is a monorepo of focused packages. Install only what you need.

Build & run agents

PackageVersionDescription
@sapiom/agentnpmThe authoring contract: defineAgent, defineStep, directives (goto/terminate), and types
@sapiom/toolsnpmTyped client for Sapiom capabilities — the same tools your agents call, callable from your code
@sapiom/clinpmCommand line: scaffold, validate, deploy, and schedule agents
@sapiom/mcpnpmLocal developer MCP server (sapiom-dev) — build & operate agents from your coding agent

Agent Studio

Agent Studio runs your coding agent (Claude Code or Codex) in a Sapiom-configured environment: MCP pre-wired, agent projects tracked, one-click deploy/run, and a live canvas for previews.

PackageVersionDescription
@sapiom/agent-studionpmAgent Studio launcher — npx @sapiom/agent-studio@latest
@sapiom/harnessnpmThe Agent Studio implementation — a CLI-launched local web app
@sapiom/harness-desktopGitHub releaseSapiom Studio desktop app (Electron) — ships as signed installers, not to npm

Runtime internals

Lower-level packages that power the stack above. Most users never import these directly, but they're published for advanced/host integrations.

PackageVersionDescription
@sapiom/agent-corenpmPure, stateless functions for scaffolding, validating, and operating agents — shared by the CLI and MCP
@sapiom/agent-runtimenpmHost-agnostic graph-walker runtime — one runtime, two hosts (server engine + local runner)

🚀 Quick Start

New to Sapiom? The fastest path is the CLI or the developer MCP — both scaffold a working agent for you. See the examples folder for complete, runnable projects.

Scaffold an agent with the CLI

npx @sapiom/cli agents init my-app # scaffold a projectcd my-app
npx @sapiom/cli agents check # validate locally (bundle, manifest, graph)
npx @sapiom/cli agents deploy # build and ship

Build with your coding agent in Agent Studio

One command checks your environment, signs you in, and opens Agent Studio with your coding agent running in an embedded terminal:

npx @sapiom/agent-studio@latest [dir]

Prefer a native app? Sapiom Studio is the one-click desktop host for the same experience — download installers (macOS, Windows, Linux) from GitHub Releases.

Author an agent

An agent is a typed graph of steps. Each step does work and returns a directive telling the runtime where to go next.

import{defineAgent,defineStep,goto,terminate}from"@sapiom/agent";conststart=defineStep({name: "start",next: ["finish"],asyncrun(input,ctx){returngoto("finish",{greeting: `hello ${input.name}`});},});constfinish=defineStep({name: "finish",next: [],terminal: true,asyncrun(input){returnterminate({done: true, ...input});},});exportconsthello=defineAgent({name: "hello",entry: "start",steps: { start, finish },});

Call Sapiom capabilities from your code

@sapiom/tools exposes the same capabilities your agents call as tools, typed and authenticated to your tenant.

import{createClient}from"@sapiom/tools";constsapiom=createClient({apiKey: process.env.SAPIOM_API_KEY});// Create a repo, have a coding model build into it, then publish.constrepo=awaitsapiom.repositories.create("landing-page");construn=awaitsapiom.models.coding.run({task: "Build a one-page marketing site in index.html.",gitRepository: repo,});if(run.result?.success){const{ sha }=awaitrepo.pushFromSandbox(run.sandbox,{message: "build: landing",});console.log("published",sha);}

Build agents from your coding agent (MCP)

Add the local developer MCP so your coding agent can scaffold, test, deploy, and inspect Sapiom agents. In Claude Code:

claude mcp add sapiom-dev -- npx -y @sapiom/mcp

@sapiom/mcp is the local developer surface (sapiom_dev_*). It is distinct from the remote Sapiom capability MCP that services paid tool calls — see docs/mcp-servers.md for which to use when.

📚 Documentation

🏗️ Package Architecture

@sapiom/agent Authoring contract (defineAgent, directives, types)
↑
├── @sapiom/agent-runtime Host-agnostic graph-walker runtime
└── @sapiom/agent-core Scaffold / validate / operate (pure functions)
↑
├── @sapiom/cli Command line
└── @sapiom/mcp Local developer MCP (sapiom-dev)
@sapiom/tools Typed capability client (sandboxes, repos, models, …)
@sapiom/harness Agent Studio (local web app; launched via @sapiom/agent-studio)
↑
└── @sapiom/harness-desktop Sapiom Studio desktop app (Electron host, ships as installers)

🛠️ Development

This is a pnpm workspace monorepo.

# Install dependencies
pnpm install
# Build all packages
pnpm build
# Run tests
pnpm test# Lint and format
pnpm lint
pnpm format

Package Scripts

# Build / test a specific package
pnpm --filter @sapiom/agent build
pnpm --filter @sapiom/tools test# Watch mode
pnpm --filter @sapiom/agent dev

Publishing

We use Changesets for version management:

pnpm changeset # create a changeset
pnpm version-packages # apply version bumps
pnpm release # build and publish to npm

🤝 Contributing

Contributions welcome! Please read our Contributing Guide first — it explains which changes can go straight to a pull request (focused bug fixes, documentation corrections, single-template additions) and which need a maintainer-agreed issue before you invest in them (new features, public API changes, new dependencies, cross-package work).

In short:

  1. Fork the repository and branch from the latest main
  2. Keep the change focused on one problem, with tests for changed behavior
  3. Run the root checks (pnpm build, pnpm typecheck, pnpm lint, pnpm test)
  4. Add a changeset when a published package's behavior or API changes
  5. Open a pull request and complete every applicable section of the template

AI-assisted contributions are welcome but must be disclosed, reviewed, and validated by the contributor. For suspected security vulnerabilities, follow the Security Policy instead of opening a public issue.

📄 License

MIT © Sapiom

🔗 Links

About

TypeScript / Node libraries

Resources

Contributing

Security policy

Stars

19 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages