Skip to content

Latest commit

Β 

History

2,201 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

OpenCrane

The vision

AI assistants become far more valuable when they understand how people work, can use company tools, and can carry knowledge across conversations. At organisation scale, that creates a governance problem: every assistant needs the right identity, context, permissions, budget, and approval boundaries β€” without exposing one person's work to another.

OpenCrane is a self-hosted control plane for organisational AI. It gives every employee a durable personal assistant, lets the organisation run shared agents for scheduled and triggered work, and keeps the organisation in control of its data, knowledge, skills, tools, models, and audit history.

Why OpenCrane

Vendor-hosted assistants are convenient, but they place proprietary workflows, conversations, and company knowledge inside another company's platform, and they tie an organisation's operating model to one model provider.

OpenCrane keeps the organisational layer on infrastructure you control:

  • employee conversations, files, personas, and memory stay private to their authorised user;
  • company knowledge, integrations, skills, and agent definitions stay organisation-owned;
  • model providers and credentials can change without rebuilding the assistant product;
  • budgets, approvals, access decisions, and activity are governed in one place; and
  • each organisation runs inside its own isolated boundary.

Two kinds of agent

Everything in OpenCrane is built around one distinction.

  • Personal assistants work for a single employee. An assistant can see and use only that person's approved context, tools, skills, files, and memory. Its work is private to them, and it builds up an understanding of how that employee works over time.
  • Managed agents do bounded work for the organisation, a department, a team, or a project β€” on a schedule or in response to a trigger. Each managed agent runs under its own narrowly scoped identity, and can never quietly inherit the person who created it, the employee who started it, or anyone's private memory or personal tools.

Both kinds share the same foundation: durable conversations, governed actions, versioned skills and files, and permitted access to organisation knowledge.

How it works

Each organisation is one isolated boundary. Inside it, a control plane holds the durable record of everything β€” who the agents are, what they may do, and everything they have done. When an agent needs to act, OpenCrane spins up a short-lived, isolated agent runtime for that single task, hands it one frozen snapshot of its input, and removes it when the task finishes. The runtime streams its progress back to the control plane but holds no authority of its own, so an assistant survives restarts, scaling, and a closed browser tab without ever becoming the source of truth.

        Employees                                              Schedules & triggers
            β”‚                                                           β”‚
            β”‚                                                           β”‚
╔═══ YOUR ORGANISATION β€” one isolated boundary ═════════════════════════════════════════════════════╗
β•‘           β”‚                                                           β”‚                           β•‘
β•‘           β”‚                                                           β”‚                           β•‘
β•‘           β–Ό                                                           β–Ό                           β•‘
β•‘   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β•‘
β•‘   β”‚ Personal assistant      β”‚  β”‚ identity adjusted       β”‚   β”‚ Managed agent                 β”‚    β•‘
β•‘   β”‚ private to one          β”‚β•Œβ•Œβ”‚ to the employee         β”‚   β”‚ bounded, scoped work          β”‚    β•‘
β•‘   β”‚ employee                β”‚  β”‚ (per-person sidecar)    β”‚   β”‚ own scoped identity           β”‚    β•‘
β•‘   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β•‘
β•‘                β”‚                                                             β”‚                    β•‘
β•‘                β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                    β•‘
β•‘                                  β–Ό                                                                β•‘
β•‘           β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β•‘
β•‘           β”‚           OpenCrane control plane           β”‚    β”‚ Shared organisation services    β”‚  β•‘
β•‘           β”‚       identity Β· conversations Β· tasks      β”‚    β”‚ maintained centrally,           β”‚  β•‘
β•‘           β”‚     approvals Β· budgets Β· access Β· audit    β”‚    β”‚ outside the agents              β”‚  β•‘
β•‘           β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚                                 β”‚  β•‘
β•‘               runs a           β”‚   β–²   progress              β”‚  β€’ Models                       β”‚  β•‘
β•‘                task            β”‚   β”‚                         β”‚  β€’ Tools                        β”‚  β•‘
β•‘                                β–Ό   β”‚                         β”‚  β€’ Memory & knowledge           β”‚  β•‘
β•‘           β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚  β€’ Files & artifacts            β”‚  β•‘
β•‘           β”‚                Agent runtime                β”‚usesβ”‚                                 β”‚  β•‘
β•‘           β”‚     isolated & short-lived Β· one task Β·     │───▢│                                 β”‚  β•‘
β•‘           β”‚           keeps no standing access          β”‚    β”‚                                 β”‚  β•‘
β•‘           β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β•‘
β•‘                                                                                                   β•‘
β•‘                                                                                                   β•‘
β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•

The control plane governs the parts that must be consistent across every agent:

  • Durable conversations keep an ordered history that replays after a reconnect, instead of trusting the browser or the runtime to remember.
  • Governed actions pause for approval when a step needs it, and record the exact action taken and its outcome.
  • Versioned skills and files preserve which capability or input a task actually used, even after a newer version is published.
  • Organisation memory makes permitted company knowledge available to an agent without granting it broad access to any employee's private data.
  • Budgets and audit track spend and activity in one place, per agent and per organisation.

See the illustrated architecture overview for the full reader-facing system view.

What an organisation admin configures

An agent's reach is set once, centrally, by an organisation admin β€” never by the agent or the person using it. Each setting becomes part of the effective contract OpenCrane freezes into a task before its agent runtime starts, so changing a policy shapes future tasks and never rewrites one already running.

                                       β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                                       β”‚ Organisation adminβ”‚
                                       β”‚                   β”‚
                                       β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                                 β–Ό
╔═══ OpenCrane control plane β€” what an organisation admin configures ═════════════════════════════╗
β•‘                                                                                                 β•‘
β•‘  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β•‘
β•‘  β”‚ People & access                           β”‚   β”‚ Agents & skills                           β”‚  β•‘
β•‘  β”‚ employees Β· departments Β· teams Β·         β”‚   β”‚ managed agent definitions & revisions     β”‚  β•‘
β•‘  β”‚ projects Β· who may use what (grants)      β”‚   β”‚ schedules Β· triggers Β· published skills   β”‚  β•‘
β•‘  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β•‘
β•‘                                                                                                 β•‘
β•‘  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β•‘
β•‘  β”‚ Tools & integrations                      β”‚   β”‚ Models & providers                        β”‚  β•‘
β•‘  β”‚ MCP tool servers Β· tool grants            β”‚   β”‚ provider keys (BYOK) Β· enabled models     β”‚  β•‘
β•‘  β”‚ external integrations & approvals         β”‚   β”‚ model routing defaults                    β”‚  β•‘
β•‘  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β•‘
β•‘                                                                                                 β•‘
β•‘  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β•‘
β•‘  β”‚ Knowledge                                 β”‚   β”‚ Budgets & audit                           β”‚  β•‘
β•‘  β”‚ organisation retrieval sources            β”‚   β”‚ spend caps Β· usage quotas                 β”‚  β•‘
β•‘  β”‚ what agents may retrieve                  β”‚   β”‚ audit log (view decisions & activity)     β”‚  β•‘
β•‘  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β•‘
β•‘                                                                                                 β•‘
β•‘                                                                                                 β•‘
β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•
                    compiled into the frozen contract for every task
                                                 β–Ό
              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
              β”‚ Effective contract for one task                                     β”‚
              β”‚ the frozen snapshot each Agent runtime receives β€” no setting        β”‚
              β”‚ can change once the task has started                                β”‚
              β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Documentation

The complete documentation is at opencrane.ai, including:

Quick start

Prerequisites

  • Node.js 22 or newer
  • Kubernetes 1.30 or newer
  • Helm 3
  • kubectl
  • a CloudNativePG operator in the target cluster

Build and test

npm ci
npm run build
npm run test

Developers and coding agents can add source-anchored semantic repository context to a clone with npm run agent-context:setup. The index is advisory and complements Nx; it does not replace Nx project boundaries, affected calculation, builds, or tests. See the repository-context guide for the supported platforms and loop.

Deploy an organisation

The deployment entrypoint installs one isolated organisation boundary. Before running it, create the PostgreSQL credential Secrets named in the command and configure the organisation's OpenID Connect (OIDC) identity provider.

export OIDC_ISSUER_URL="https://identity.example.com"
export OIDC_CLIENT_ID="opencrane-acme"
export OIDC_REDIRECT_URI="https://acme.opencrane.example/api/v1/auth/callback"

apps/_infra/deploy-k8s/deploy.sh \
  --base-domain opencrane.example \
  --cluster-tenant acme \
  --postgres-credentials-secret opencrane-postgres-bootstrap \
  --obot-postgres-credentials-secret opencrane-obot-postgres-bootstrap \
  --litellm-postgres-credentials-secret opencrane-litellm-postgres-bootstrap

This installs the isolated acme organisation boundary and serves its UI and REST API at https://acme.opencrane.example. The API is rooted at /api/v1; the generated OpenAPI document and interactive reference are linked from the API documentation.

For deployment profiles, required Secrets, and local cluster setup, follow the cluster deployment guide.

Repository layout

For a two-minute orientation: application deployables live under apps/, reusable capabilities under libs/, shared API contracts under libs/contracts/, and the documentation site under website/.

Repository contributors should start with AGENTS.md. Capability history lives in CHANGELOG.md, while completed implementation history and design context live in plan-done.md.

Licence

OpenCrane is available under the GNU Affero General Public License v3.0 or later.

About

Give your staff claw-like wings πŸ¦€πŸ¦β€πŸ”₯. OpenCrane wraps OpenClaw with organisational awareness and control. Provide a personal AI agent to all your staff in a sovereign, secure and low-cost way.

Resources

Stars

7 stars

Watchers

1 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages