⚙️
🔁
📦
The Autocode Engine · smilinTux ecosystem

skharness

Give it a repo and a task.
It runs the loop, and hands back a reviewed PR.

skharness is the single autocode engine. It builds in a lean, sandboxed context — the repo, the task brief, and repo-grounded facts, nothing else. It never sees your personal graph. One engine, two front doors: skos drives it autonomously, skcode drives it by hand.

assess build (Ralph loop) grade 1-5 twin-gate (score==5 · CI green · coverage) finalize / merge
$ pip install skharness

Python 3.10+ · skharness on PyPI (v0.3.1) · GPL-3.0. PyPI ↗ · Read the docs ↗

Context-lean · repo + task, not your graph Sandboxed · minimal blast radius Twin-gated · score==5 + CI + coverage GPL-3.0 · sovereign adapters

The layering · ADR-0001

One engine.
Two front doors.

Three names, one crisp boundary. Personal context flows down as a narrow task brief; it never flows up into a build sandbox. skharness is the engine in the middle — the only place the assess/build/grade/gate/merge loop lives.

◂ Front door · autonomous 🧠

skos

operator OS · knows you fully · runs on your host

The single pane of glass: GTD, memory, coordination board, ITIL, scheduler, and the AI-operator seat. It decides what and why to build, distills a card into a narrow brief, and dispatches it to the engine.

  • Owns all operator context
  • skos autopilot delegates to skharness.autocode
  • Tracks the reviewed PR back in coord / GTD
★ The engine · you are here ⚙️

skharness

knows only the repo + task · runs in isolated sandboxes

The autocode loop, extracted into one reusable package. Input: a repo and a task. Output: a reviewed PR. It is deliberately context-lean — a build never receives your MCP servers, memory, GTD, calendar, or soul.

  • assess → build → grade → twin-gate → merge
  • Adapters: claude-code & pi (sovereign → Ornith)
  • Also hosts the skcode session daemon
⚙️ You're on the engine site
◂ Front door · interactive ⌨️

skcode

coding client · session-scoped only · runs on your dev host

The human-facing coding surface. A thin client, not a second engine — when it needs a heavy autonomous build it calls skharness, taking the same engine path skos does, just driven by a human interactively.

  • Holds only the open project's context
  • Its read-only host daemon ships inside skharness
  • Never re-implements the loop

The autocode loop

Assess. Build. Grade. Gate. Merge.

A task brief comes in — what to build, the acceptance criteria, and the coherence constraints. skharness assesses the repo, then runs an iterative Ralph loop in a sandbox to produce a diff.

Nothing merges on vibes. Every round is graded 1-5, and the twin-gate is unforgiving: it finalizes only when the grade is exactly 5, CI is green, and coverage holds. Anything short loops back to build.

The output is a reviewed PR plus a verdict — handed back to whichever front door dispatched it. This is the loop skos autopilot already delegates to today; it is not re-implemented anywhere else.

Ralph loop grade 1-5 twin-gate grounding.py coherence gate CI green
skharness.autocode — the loop
1assessread repo + brief + grounding facts
2buildRalph loop iterates in a sandbox → diff
3gradescore the diff 1-5
4twin-gatescore==5 & CI green & coverage
5finalizeopen the reviewed PR + verdict

↺ gate fails → loop back to build (never merges short of 5)

A run, start to finish

The operator dispatches. The engine builds.

skos hands down a narrow brief. skharness assesses, builds in an isolated sandbox, grades, gates on CI and coverage, and returns a reviewed PR. The sandbox never touches the operator's graph.


One contract, two planes

The engine, and the deployment shell it hosts.

The skharness package ships two planes of one unified Harness contract. The task plane is the autocode engine — the main story. The session plane is the read-only host daemon that skcode's remote control runs on, hosted here as the engine's thin deployment shell.

🔁
Task plane · the main story
skharness.autocode
assessread repo + brief + grounding facts
buildRalph loop iterates in a sandbox
gradescore each diff 1-5
twin-gatescore==5 · CI green · coverage
finalizeopen the reviewed PR + verdict
grounding.pythe only repo-facts a build sees
📟
Session plane · deployment shell
skcode-hostd
entry pointskharness.serve:main (console script)
bindTailscale IP only · never public 🔒
port9394
surfaceread-only · GET + WS stream, no writes
authcapauth-gated every call
statusP0 read-only session MVP shipped
Build adapters — swap the model behind the loop
🤖 claude-code 🐧 pi → skgateway / Ornith 📦 Docker task-plane adapter 🖥️ tmux session-plane harness

The two same-named claude_code harnesses are intentional, not a bug — a Docker adapter on the task plane and a tmux harness on the session plane, each a distinct seam of the same contract.


Binding constraint · lean sandbox

A build sees the code. Never you.

The reason the engine is separate at all. A build sandbox is minimal-privilege by design: smaller blast radius, faster and cheaper (no 40-server load), and more focused — irrelevant context only degrades the model.

✓ Enters the sandbox
  • The target repo
  • The distilled task brief (what to build + acceptance)
  • Coherence constraints
  • Repo-grounded facts (grounding.py)
✕ Never enters the sandbox
  • The operator's MCP servers (40+)
  • Memory store, GTD, calendar
  • Agent soul / emotional state
  • Any personal graph — it flows down as a brief, never up

The SKWorld family

Part of the smilinTux ecosystem

skharness is the engine layer of the SKWorld sovereign AI ecosystem. skos drives it, skcode codes with it, and the rest of the family is what it builds on.


Where you are in the system

skharness is the engine plane.
Intent flows down. Code flows up.

Personal context enters a build only as a distilled brief — what to build, the acceptance, the constraints. It never arrives as the whole graph. That one rule is why there is a single engine, why sandboxes are minimal-privilege, and why the operator's data has exactly one home.

Layer Responsibility Knows you?
skos operator OS — decides what & why, dispatches the brief yes · fully
skcode interactive coding client — a human at the wheel minimally
skharness ← here the autocode loop — assess→build→grade→gate→merge no
sandbox isolated build — repo + brief + grounding, nothing personal no

⚙️

Point it at a repo.

The engine that skos and skcode both drive. Context-lean, sandboxed, twin-gated. Install it, or read how it fits the stack.

$ pip install skharness

"staycuriousANDkeepsmilin" 🐧