Skip to content
skella
skella — Autonomous delivery platform Pre-init · in active development

Autonomous
delivery.

Plan 01
Implement 02
Gate 03
Merge 04

A standing control plane drives your issues through plan → implement → gate → merge. Ephemeral, single-tenant runners do the work with the agent of your choice and short-lived, job-scoped credentials — then disappear.

Bring your own agent/Self-hosted or managed
Delivery coordinator Scheduling

Runner for issue #482 — gate suite green. Implement and gate ran in one isolated container; opening the PR.

provenance · plan #418 → branch → gate
Human gate

Another item touched a suppression — parked for your approval before it can merge.

The principle / 01
The control plane is deterministic code, not an LLM holding the whole run in context. Only the bounded units of work are agents.

Each unit of work — plan one issue, implement one issue, run the gate suite — runs inside a fresh, single-tenant runner that reads durable inputs, does a bounded job, writes durable output, and is torn down. The runner is the bounded unit: hard-isolated in its own container with a finite lifetime, so context never accumulates and a crash or rate-limit never loses the thread.

Deterministic core

Plain code enforces caps, blockers, and the killswitch — auditable and replayable.

Bounded runners

Every item gets a throwaway, single-tenant runner with only the inputs it needs.

No drift

Nothing spans items, so there is no accumulating context to corrupt a run.

How it works / 02

One standing control plane. Throwaway runners.

The control plane spawns a workflow per issue; each step launches and supervises an ephemeral runner that does the bounded work, then disappears.

Durable control plane launches → supervises → tears down every runner
01

Plan

An agent drafts the approach from the issue and the pack. A genuine fork parks to Needs Decision for a human.

Human gate
02

Implement

A runner writes the branch with your chosen agent, to the conventions the pack declares.

Automated
03

Gate

Preflight and gate plugins run in the same runner. A diff touching a suppression always parks.

Automated
04

Merge

Opens a PR to Ready to Merge for a one-click human merge — or auto-merges once a gate earns trust.

Human gate
Architecture / 03

03.

Control plane vs data plane

A standing, multi-tenant control plane schedules and supervises; ephemeral, single-tenant runners do the work and disappear.

Control plane

standing · cloud

Multi-tenant and always on. It schedules work but never checks out your code and never holds long-lived workload secrets in process.

  • Tenant-scoped, authenticated API
  • Temporal — durable orchestration
  • Secrets manager + short-lived token minter
  • Forge & tracker integration registry

Data plane

ephemeral · isolated

A throwaway runner per item, single-tenant and isolated. Your source, secrets, and a semi-autonomous agent meet only inside one container with a finite lifetime.

  • One single-tenant runner per item
  • Short-lived, job-scoped credentials at launch
  • Runs your chosen agent against a git worktree
  • Torn down when the item completes

The board (the human surface for parked decisions) and per-repo project packs both ride on top of this split — the control plane reads the board; the runner loads the pack.

Bring your own agent / 04

The agent is a choice, not a hardwire

One normalized contract — task, repo context, tools in; result and structured output back. Any agent that fills it plugs in behind a single port.

04.

ClaudeOpenAI / CodexGeminiAiderOSS models

Per-tenant choice

Pick the agent that fits your cost, capability, or policy. Selected by config, run inside the runner.

Bring your own key

Your model key, encrypted at rest and injected per job. Metered keys are a later option.

Pack ⟂ agent

The pack declares what to do; the agent is who executes. The pack names no model.

Uniform tools

Forge and tracker tools reach any agent through MCP servers — capability never depends on the model.

Project packs / 05

05.

The engine knows nothing about your repo

Everything repo-specific lives in a project pack the engine loads at run time. Hard-coding a consumer repo's behaviour into the engine is a bug.

Pack element What it supplies
Planning prompt how to plan an issue for this repo
Implement command the repo's implement pipeline
Preflight command the repo's quality gate
Gate plugins conventions to enforce before Ready to Merge
Conventions + memory inputs that let the agent decide autonomously

A pack declares what to do — never which model does it. The agent is chosen separately, so packs stay portable. The first consumer pack is roulez.

Credentials & isolation / 06

No standing access. Bounded blast radius.

Semi-autonomous agents touch your code, so credentials are job-scoped, least-privilege, and short-lived — injected at launch, never baked into images, never logged, destroyed with the runner.

06.

Forge access

Install the skella GitHub App; the control plane mints a per-repo installation token with a ~1h TTL at launch and injects it into the runner. GitLab / Bitbucket use the same forge port.

Issue tracker

A per-provider OAuth app; the refresh token lives in a real secrets manager — never in plaintext. A short-lived access token is minted per job.

Agent key

Your model key — bring your own, encrypted at rest, injected per job and destroyed with the runner.

Runner → control plane

A job-scoped JWT (expires at the job timeout) lets the runner report status without any standing credential.

The real boundary

A tenant's source, secrets, and agent meet only inside a single-tenant container. The managed tier adds strong isolation (microVM / gVisor) and egress controls; on the self-hosted tier that boundary sits on your own infrastructure. A compromised runner is one repo for ~1h — and self-healing on expiry.

Trust & merge graduation / 07

07.

Auto-merge is earned, not assumed

Gates graduate toward autonomy by proving themselves — and the riskiest changes never graduate at all.

A

Queue for a human

Every item starts by queueing in Ready to Merge for a one-click human merge. Nothing auto-merges on day one.

B

Earn trust over real PRs

Each gate keeps a trust record. As a gate proves itself over real PRs with zero escapes, it graduates toward risk-tiered auto-merge.

C

Suppressions always park

A diff that touches any suppression or allow-list is never auto-merge-eligible and always parks for a human.

No agent self-exception

An agent may never grant itself an exception. Suppressions are a centralized, justified, human-approved, staleness-tested resource — and adding one is itself a gated, parking event. The engine surfaces; humans suppress.

Status & roadmap / 08

Where the build is, honestly

The repos hold conventions and design only — the platform itself is not built yet. The architecture is decided; what follows is the build order, not shipped features.

08.

pre-init In active development — get notified when a milestone lands.

Foundation decided

  • Tenancy & identity — org per tenant, runner as the isolation boundary
  • Ephemeral runner compute — the ComputePort, local containers first
  • Credentials & secrets — short-lived, job-scoped tokens
  • Pluggable agents — one agent port, bring your own key

Tiered rollout

Tier 1 — Self-hosted

first

Cloud control plane; a local-container runner you run on your own infrastructure; bring-your-own keys; the GitHub App and one issue tracker. Lowest isolation burden — you own the runner host. Proves the loop end-to-end across tenants.

Tier 2 — Managed

later

Orchestrated / serverless runner adapters with microVM isolation and egress controls; optional metered billing. Additive on the seams from Tier 1 — a new adapter, not a rewrite.

Get notified skella

One email
when it's real.

No cadence, no marketing — just a note when skella ships a real milestone. Drop your address and we'll reach out.