Skip to content

Design a UserLevel plugin manager for operational workflows #725

@Q00

Description

@Q00

Vision

Ouroboros should be understood as an OS-like core plus UserLevel programs built on top of it.

The core should provide stable primitives. UserLevel programs should compose those primitives into useful workflows. Some UserLevel programs can be first-party and ship with Ouroboros, such as ooo auto. Others should be installable plugins maintained by teams or the ecosystem.

This gives us a cleaner boundary than putting every useful workflow into core, or into ooo auto.

Layer Model

+-------------------------------------------------------------------+
|                Installable UserLevel Programs                      |
|                                                                   |
|  github-pr-ops   merge-assistant   jira-sync   linear-triage       |
|  slack-incident  release-coordinator  customer-debugger  ...       |
+-------------------------------+-----------------------------------+
                                |
                                | plugin contract / declared scopes
                                v
+-------------------------------------------------------------------+
|                First-party UserLevel Programs                      |
|                                                                   |
|  ooo auto     ooo run     ooo pm     ooo review?     ...           |
|                                                                   |
|  These are product-level workflows maintained with Ouroboros,       |
|  but they are still programs above the core, not the core itself.   |
+-------------------------------+-----------------------------------+
                                |
                                | uses stable OS primitives
                                v
+-------------------------------------------------------------------+
|                         Ouroboros Core / OS                         |
|                                                                   |
|  Seed      Ledger      State      Runtime      MCP                 |
|  Provenance  Safety Boundaries  Progress/Status  Handoff           |
+-------------------------------+-----------------------------------+
                                |
                                | bounded adapters / external calls
                                v
+-------------------------------------------------------------------+
|                    External Systems / Runtimes                      |
|                                                                   |
|  GitHub   Jira   Linear   Slack   CI   Local repo   Agent CLIs      |
+-------------------------------------------------------------------+

Core Boundary

Core should provide primitives that can support many workflows:

  • Seed generation and validation
  • Ledger and evidence/provenance tracking
  • Durable workflow state
  • Runtime/provider abstraction
  • MCP tool surfaces
  • Safety boundaries and permission checks
  • Progress, recovery, and status reporting
  • Execution handoff and result attachment

Core should not directly encode every domain workflow. It should not need built-in knowledge of GitHub PR merge policy, Jira triage semantics, Slack incident response flows, release checklist conventions, or customer support debugging playbooks.

Those belong at the UserLevel.

First-party UserLevel Programs

ooo auto is not the core. It is a first-party UserLevel program built on core primitives.

Its product boundary should stay clear:

ooo auto:
  goal -> clarification/interview -> Seed -> validation -> execution handoff

That is a valuable first-party workflow. It can use Seed, ledger, state, provenance, safety, runtime, MCP, progress, recovery, and handoff primitives. But it should not become the place where every operational workflow is routed.

This distinction matters. Saying something does not belong in core does not mean Ouroboros cannot ship UserLevel programs. It means those programs should have explicit product boundaries.

Installable UserLevel Programs

Many useful workflows should live beside ooo auto, not inside it.

Examples:

github-pr-ops       review PRs, summarize status, prepare merge decisions
merge-assistant     enforce team-specific merge policies
jira-sync           turn Seeds or execution results into Jira updates
linear-triage       classify and route product/engineering issues
slack-incident      gather context, summarize incident state, draft updates
release-coordinator coordinate changelog, CI, tags, and rollout checks

These workflows can be powerful while remaining outside both core and ooo auto.

Plugin / Program Manager

To support installable UserLevel programs, Ouroboros needs a manager layer.

The manager is not just a convenience installer. It is the boundary that lets external programs use core primitives safely and predictably.

Example UX sketches:

ouroboros plugin add github-pr-ops
ouroboros plugin trust github-pr-ops --scope github:read,pull_request:write

ooo github-pr review https://github.com/org/repo/pull/123
ooo github-pr merge --policy team-default

or, if we want a shorter UserLevel syntax:

ooo add github-pr-ops
ooo github-pr "review and prepare merge for PR #123"

The plugin owns the command namespace. Core owns the permission model, audit trail, state contract, and execution boundaries.

Required Contract

A first-class UserLevel program/plugin contract likely needs:

  • Manifest: name, version, description, commands, entry points
  • Capabilities: declared access to core primitives such as Seed, ledger, state, MCP, runtime, and handoff
  • Permissions: declared external scopes such as GitHub read/write, filesystem, network, shell, or repo access
  • Command namespace: explicit ownership and collision handling
  • State boundaries: plugin-owned state vs core-owned state
  • Audit/provenance: every program-driven action records who invoked it, what program ran, what capabilities were used, and what external systems were touched
  • Version pinning: reproducible workflow behavior across teams and agents
  • Trust policy: local plugins, git-sourced plugins, registry plugins, signed or verified plugins
  • Uninstall/update semantics: remove or upgrade without corrupting core state

Why This Matters

The failure mode is clear:

Bad direction:
  ooo auto grows GitHub logic, Jira logic, Slack logic, release logic, etc.

Better direction:
  Core exposes stable OS primitives.
  ooo auto remains a first-party goal -> Seed -> handoff program.
  Additional domain workflows become separate UserLevel programs.

This gives contributors a clean place to put useful but domain-specific ideas. Instead of debating whether every workflow belongs in core or inside ooo auto, we can ask:

  1. Is this an OS primitive?
  2. Is this part of an existing first-party UserLevel program's product boundary?
  3. Or should it be a separate UserLevel program/plugin?

Relationship To #689

#689 is a good example of the boundary problem.

The GitHub PR operational workflow is useful, but it is neither an OS primitive nor part of the ooo auto product boundary.

It should become a separate UserLevel program such as github-pr-ops or merge-assistant, using core primitives for state, provenance, safety, policy checks, and execution handoff.

That keeps core small, keeps ooo auto coherent, and still allows the ecosystem to grow.

MVP Direction

Sub-issue priority: C + D first (audit-wrapped invocation + github-pr-ops reference plugin). A and B (manifest format expansion, manager UX maturation) emerge from what D actually exercises. See #726 for the full sub-issue index.

A full package ecosystem is a large product. The first step should probably be a local-only contract MVP, not a registry.

Possible MVP:

  • Local plugin/program manifest
  • Command namespace registration
  • Declared core capabilities
  • Declared external permissions
  • Read-only provenance/audit recording
  • No registry
  • No auto-update
  • No destructive permissions by default
  • One reference UserLevel program, likely github-pr-ops, to validate the contract

The goal is to stabilize the contract before promising a full ecosystem.

Open Questions

Resolved questions (kept for history; resolutions are referenced):

Non-goals

  • Do not move domain-specific operational workflows into core.
  • Do not put every useful workflow into ooo auto.
  • Do not let plugins mutate arbitrary core state without declared capabilities.
  • Do not make install imply trust for destructive actions.
  • Do not design this only for GitHub PR workflows; GitHub should be one UserLevel program, not the architecture.
  • Marketplace as a product surface is a non-goal. Plugin distribution is local path + git URL only. Any future catalog/index is reproducibility infrastructure, not a discovery / ranking / recommendation surface.

Self-restraint (operating principles)

The plugin layer exists to keep core small, not to grow ecosystem surface area. Specifically:

  • We do not pursue plugin count, marketplace dynamics, or "ecosystem health" as success metrics. The success metric for Ouroboros remains the strength of the spec-first discipline (Interview / Seed / Evolve / Provenance) and the quality of execution under that discipline.
  • Reference plugins are deliberately few, high-quality, and maintained by core authors or co-maintainers — not a long-tail catalog.
  • Lock-in for Ouroboros comes from the spec-first discipline and the durable substrate (ledger, provenance, seed history), not from how many plugins exist on top.
  • The plugin layer is plumbing. It exists invisibly to prevent core bloat. It is not a product surface.

Metadata

Metadata

Assignees

No one assigned

    Labels

    OSCore engine, state machine, internal pipeline, and system-level behaviorenhancementNew feature or meaningful improvementneeds-designMulti-PR epic or architectural change, needs human planning

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions