Skip to main content

EVERY LAYER. AN OPEN STANDARD.

Lock-in is what happens when the auth flow, the storage format, and the wire protocol are all owned by one vendor. systemprompt.io picks the standard at every layer instead: MCP, OAuth 2.0, WebAuthn, Git, PostgreSQL, ChaCha20-Poly1305, Markdown. Replace any layer. The next system you choose already speaks them.

Communication Is MCP, REST, SSE, and WebSockets

When the wire protocol between your agent and your governance layer is proprietary, switching providers means rewriting every client. The cost of leaving is paid by every integration you ever shipped. That is the failure mode systemprompt.io rules out at the protocol layer.

Agent communication runs on MCP through the rmcp crate. The marketplace MCP server registers 24 tools across six categories (skills, agents, MCP servers, plugins, utilities, analytics) in register_all_tools, and every category is wired by an explicit register_*_tools function. REST handlers are Axum routes returning structured JSON. Real-time updates use Server-Sent Events and Streamable HTTP.

Any MCP-compatible client connects with no adapter. Claude Code, OpenAI Codex, and Gemini CLI all speak MCP today. The compatibility guarantee is the public specification, not a private SDK.

  • MCP via rmcp 1.1 — Marketplace tools registered through register_all_tools. Six register_*_tools functions cover skills, agents, MCP servers, plugins, utilities, and analytics. The rmcp 1.1 dependency is declared in the template Cargo.toml.
  • Axum REST Handlers — Administrative routes are plain Axum handlers returning JSON. No vendor-specific RPC envelope. Any HTTP client speaks the API.
  • SSE and Streamable HTTP — Real-time updates over Server-Sent Events. Bidirectional MCP transport via the streamable HTTP feature flag enabled in the rmcp dependency.

Identity Is OAuth 2.0, WebAuthn, and JWT

A proprietary auth SDK is the deepest form of lock-in. Every service that trusts your identity layer is now coupled to one vendor's session format. When you leave, the IdP integrations leave with you. systemprompt.io refuses that trade by issuing identity through three published standards instead.

OAuth 2.0 client records, scopes, and grant types are stored in three explicit schema files (oauth_clients.sql, oauth_client_scopes.sql, oauth_client_grant_types.sql). WebAuthn credentials are stored in webauthn_credentials.sql, which keeps a public key and credential id per user, not a shared secret. JWT validation lives in crates/domain/oauth/src/services/jwt.

Because webauthn_credentials stores only a public key, the database holds no credential a phisher can replay. That is a property of the W3C WebAuthn schema, not a marketing claim about it.

  • OAuth 2.0 Authorization Server — Clients, scopes, and grant types modelled in three SQL files under crates/domain/oauth/schema. systemprompt.io is its own issuer.
  • WebAuthn Credentials — Per-user public keys and credential ids stored in webauthn_credentials.sql. No shared secret on the server side.
  • JWT Services — Token issue and verify code under crates/domain/oauth/src/services/jwt. Standard claims, standard libraries, no proprietary session format.

Content Is Markdown, YAML, and JSON Schema

An "export to open formats" feature is a tell. It means the real format is something else, and the export is best effort. When the storage format is the open format, there is nothing to export. systemprompt.io picks the second option.

Skills are SKILL.md files with YAML frontmatter, modelled by the Skill struct in crates/domain/agent/src/models/skill.rs and round-tripped by the sync code in crates/app/sync/src/export/skills.rs. JSON Schemas for MCP tool inputs are generated from Rust types by schemars at compile time. Any text editor opens the files. Any language parses them.

What sits on disk is what the library reads. There is no internal representation to convert from.

  • SKILL.md with YAML Frontmatter — Skill struct in skill.rs maps directly to the Markdown plus YAML on disk. Same shape in the file, the database, and the export.
  • JSON Schema via schemars — MCP tool input schemas are derived from Rust types by schemars at compile time. Any JSON Schema validator in any language works.
  • Handlebars and TOML — Templates in Handlebars, build configuration in TOML. Both are multi-language standards with parsers in every ecosystem.

Distribution Is Git and PostgreSQL

When governance content lives in a vendor SaaS, you cannot diff it, you cannot review it, and you cannot move it. Reviewers lose the workflow they trust for source code at the exact moment AI policy starts mattering. systemprompt.io stores content where reviewers already work.

Skill, agent, and plugin definitions sync to and from disk through crates/app/sync/src/local/skills_sync.rs and the export module under crates/app/sync/src/export. Operational state lives in PostgreSQL, with table definitions split into per-domain SQL schema files under crates/domain/*/schema. Queries are checked against the live schema by sqlx at compile time, so an ORM is not hiding the data model.

Two audit trails run in parallel: Git history for content changes, database rows for operational events. Both are queryable with tooling your team already owns.

  • Git-Native Sync — Local sync code under crates/app/sync writes skills and plugins to disk as files, ready to commit, branch, review, and push with standard Git tooling.
  • Per-Domain SQL Schemas — Schema lives in plain .sql files under crates/domain/*/schema. No proprietary migration format. psql and pg_dump work as expected.
  • PostgreSQL with sqlx — Queries verified at compile time against the live schema. Move to any PostgreSQL-compatible service (RDS, Cloud SQL, Supabase, Neon) without changing application code.

Encryption Is ChaCha20-Poly1305, SHA-2, and Argon2

Custom cryptography is its own form of lock-in. A security team that cannot name the primitive cannot audit it, and an auditor cannot tell a regulator what is protecting secrets at rest. systemprompt.io picks named, peer-reviewed primitives so that question has a one-line answer.

Secrets at rest use ChaCha20-Poly1305 AEAD via the chacha20poly1305 crate. Password hashing uses Argon2 via the argon2 crate. Message integrity uses SHA-2 and HMAC via sha2 and hmac. Every primitive is declared in the template Cargo.toml and called from the secret tools under extensions/mcp/marketplace/src/tools/get_secrets and manage_secrets.

The dependencies are public crates with public source. The same primitives are the same ones in every cryptography textbook. There is nothing compiled in that an auditor cannot read.

  • ChaCha20-Poly1305 AEAD — Authenticated encryption for secrets at rest via the chacha20poly1305 crate. The same AEAD construction used by WireGuard and TLS 1.3.
  • SHA-2 and HMAC — Message integrity via the sha2 and hmac crates. NIST-standardised, parsed by every cryptography library.
  • Argon2 Password Hashing — Password Hashing Competition winner. Memory-hard, resistant to GPU and ASIC attacks. Available via the argon2 crate declared in Cargo.toml.

One Library, Every Standard, Deployable Anywhere

The honest version of "no lock-in" is not zero migration cost. Custom extensions you build on top of systemprompt.io are still yours to port, and an integration with your IdP still has to be redone if you replace the whole stack. What systemprompt.io rules out is the worst case: a proprietary wire protocol, a proprietary storage format, and a hosted control plane you cannot run yourself.

Every interface on this page is a published standard. The RBAC enforcement that gates MCP requests is enforce_rbac_from_registry in crates/domain/mcp/src/middleware/rbac.rs, a named function any reviewer can read. The whole library compiles to a single Rust binary with PostgreSQL as the only external dependency. The same binary runs on a laptop, a cloud VM, a bare metal box, or an air-gapped network.

This is not an "open-source alternative" to a SaaS product. It is an infrastructure library that speaks the standards your existing systems already speak. MCP clients connect without adapters. OAuth flows plug into your existing IdP. Git repositories clone with standard tooling.

  • Honest Exit Cost — Standards, schemas, and storage formats are open, so the data and the auth flows survive a swap. Custom extensions you wrote on top of systemprompt.io are still your migration to do.
  • Deploy Anywhere — One Rust binary on Docker, bare metal, cloud VM, or air-gapped network. PostgreSQL is the only external dependency.
  • RBAC Enforcement You Can Read — MCP request authorisation runs through enforce_rbac_from_registry in crates/domain/mcp/src/middleware/rbac.rs. A named function, not a generic engine.

Founder-led. Self-service first.

No sales team. No demo theatre. The template is free to evaluate — if it solves your problem, we talk.

Who we are

One founder, one binary, full IP ownership. Every line of Rust, every governance rule, every MCP integration — written in-house. Two years of building AI governance infrastructure from first principles. No venture capital dictating roadmap. No advisory board approving features.

How to engage

Every standard on this page ships in one binary.

Clone the template. Build. Run it on your own infrastructure with PostgreSQL as the only external dependency.