@agentikos/omega-os 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +127 -0
  3. package/bin/omega-os.js +48 -0
  4. package/bootstrap/lib/common.sh +73 -0
  5. package/bootstrap/lib/steps.sh +153 -0
  6. package/bootstrap/manifest.example.yaml +45 -0
  7. package/docs/ACCOUNT-AND-BILLING.md +95 -0
  8. package/docs/ARCHITECTURE.md +225 -0
  9. package/docs/AUTONOMOUS-AGENTS.md +128 -0
  10. package/docs/ENGINE-SPEC.md +174 -0
  11. package/docs/INSTALL.md +106 -0
  12. package/docs/MCP-AND-PLUGINS.md +121 -0
  13. package/docs/RUNTIME-PLAN.md +63 -0
  14. package/install.sh +54 -0
  15. package/omega/Agentik_Coding/README.md +21 -0
  16. package/omega/Agentik_Engine/README.md +58 -0
  17. package/omega/Agentik_Engine/omega_engine/__init__.py +58 -0
  18. package/omega/Agentik_Engine/omega_engine/__pycache__/__init__.cpython-313.pyc +0 -0
  19. package/omega/Agentik_Engine/omega_engine/__pycache__/audit.cpython-313.pyc +0 -0
  20. package/omega/Agentik_Engine/omega_engine/__pycache__/audit_arsenal.cpython-313.pyc +0 -0
  21. package/omega/Agentik_Engine/omega_engine/__pycache__/barrier.cpython-313.pyc +0 -0
  22. package/omega/Agentik_Engine/omega_engine/__pycache__/bus.cpython-313.pyc +0 -0
  23. package/omega/Agentik_Engine/omega_engine/__pycache__/cli.cpython-313.pyc +0 -0
  24. package/omega/Agentik_Engine/omega_engine/__pycache__/events.cpython-313.pyc +0 -0
  25. package/omega/Agentik_Engine/omega_engine/__pycache__/executor.cpython-313.pyc +0 -0
  26. package/omega/Agentik_Engine/omega_engine/__pycache__/mission.cpython-313.pyc +0 -0
  27. package/omega/Agentik_Engine/omega_engine/__pycache__/progress.cpython-313.pyc +0 -0
  28. package/omega/Agentik_Engine/omega_engine/__pycache__/project.cpython-313.pyc +0 -0
  29. package/omega/Agentik_Engine/omega_engine/__pycache__/provider.cpython-313.pyc +0 -0
  30. package/omega/Agentik_Engine/omega_engine/__pycache__/reducer.cpython-313.pyc +0 -0
  31. package/omega/Agentik_Engine/omega_engine/__pycache__/report.cpython-313.pyc +0 -0
  32. package/omega/Agentik_Engine/omega_engine/__pycache__/router.cpython-313.pyc +0 -0
  33. package/omega/Agentik_Engine/omega_engine/__pycache__/store.cpython-313.pyc +0 -0
  34. package/omega/Agentik_Engine/omega_engine/__pycache__/supervisor.cpython-313.pyc +0 -0
  35. package/omega/Agentik_Engine/omega_engine/__pycache__/task.cpython-313.pyc +0 -0
  36. package/omega/Agentik_Engine/omega_engine/__pycache__/telegram.cpython-313.pyc +0 -0
  37. package/omega/Agentik_Engine/omega_engine/audit.py +96 -0
  38. package/omega/Agentik_Engine/omega_engine/audit_arsenal.py +314 -0
  39. package/omega/Agentik_Engine/omega_engine/barrier.py +45 -0
  40. package/omega/Agentik_Engine/omega_engine/bus.py +45 -0
  41. package/omega/Agentik_Engine/omega_engine/cli.py +158 -0
  42. package/omega/Agentik_Engine/omega_engine/events.py +60 -0
  43. package/omega/Agentik_Engine/omega_engine/executor.py +167 -0
  44. package/omega/Agentik_Engine/omega_engine/mission.py +145 -0
  45. package/omega/Agentik_Engine/omega_engine/progress.py +75 -0
  46. package/omega/Agentik_Engine/omega_engine/project.py +92 -0
  47. package/omega/Agentik_Engine/omega_engine/provider.py +139 -0
  48. package/omega/Agentik_Engine/omega_engine/reducer.py +76 -0
  49. package/omega/Agentik_Engine/omega_engine/report.py +146 -0
  50. package/omega/Agentik_Engine/omega_engine/router.py +34 -0
  51. package/omega/Agentik_Engine/omega_engine/store.py +97 -0
  52. package/omega/Agentik_Engine/omega_engine/supervisor.py +69 -0
  53. package/omega/Agentik_Engine/omega_engine/task.py +91 -0
  54. package/omega/Agentik_Engine/omega_engine/telegram.py +115 -0
  55. package/omega/Agentik_Engine/pyproject.toml +31 -0
  56. package/omega/Agentik_Engine/tests/__pycache__/test_audit_arsenal.cpython-313.pyc +0 -0
  57. package/omega/Agentik_Engine/tests/__pycache__/test_executor.cpython-313.pyc +0 -0
  58. package/omega/Agentik_Engine/tests/__pycache__/test_mission.cpython-313.pyc +0 -0
  59. package/omega/Agentik_Engine/tests/__pycache__/test_progress.cpython-313.pyc +0 -0
  60. package/omega/Agentik_Engine/tests/__pycache__/test_project.cpython-313.pyc +0 -0
  61. package/omega/Agentik_Engine/tests/__pycache__/test_reducer.cpython-313.pyc +0 -0
  62. package/omega/Agentik_Engine/tests/__pycache__/test_report.cpython-313.pyc +0 -0
  63. package/omega/Agentik_Engine/tests/test_audit_arsenal.py +80 -0
  64. package/omega/Agentik_Engine/tests/test_executor.py +96 -0
  65. package/omega/Agentik_Engine/tests/test_mission.py +64 -0
  66. package/omega/Agentik_Engine/tests/test_progress.py +69 -0
  67. package/omega/Agentik_Engine/tests/test_project.py +61 -0
  68. package/omega/Agentik_Engine/tests/test_reducer.py +144 -0
  69. package/omega/Agentik_Engine/tests/test_report.py +88 -0
  70. package/omega/Agentik_Extra/README.md +37 -0
  71. package/omega/Agentik_Extra/etc/agentik.env.example +19 -0
  72. package/omega/Agentik_Extra/etc/structure.yaml +46 -0
  73. package/omega/Agentik_Orchestration/README.md +43 -0
  74. package/omega/Agentik_Orchestration/autonomous/README.md +29 -0
  75. package/omega/Agentik_Orchestration/autonomous/example-agents.yaml +85 -0
  76. package/omega/Agentik_Orchestration/educators/README.md +55 -0
  77. package/omega/Agentik_Orchestration/topologies/aisb-oracle-worker.yaml +42 -0
  78. package/omega/Agentik_Orchestration/verifier/audit-router.yaml +26 -0
  79. package/omega/Agentik_Providers/README.md +62 -0
  80. package/omega/Agentik_Providers/claude/accounts.example.yaml +28 -0
  81. package/omega/Agentik_Providers/registry.yaml +30 -0
  82. package/omega/Agentik_Runtime/README.md +30 -0
  83. package/omega/Agentik_SSOT/README.md +36 -0
  84. package/omega/Agentik_SSOT/VERSION +1 -0
  85. package/omega/Agentik_SSOT/audits/a11yaudit.yaml +69 -0
  86. package/omega/Agentik_SSOT/audits/apiaudit.yaml +71 -0
  87. package/omega/Agentik_SSOT/audits/automationaudit.yaml +77 -0
  88. package/omega/Agentik_SSOT/audits/codeaudit.yaml +63 -0
  89. package/omega/Agentik_SSOT/audits/copyaudit.yaml +68 -0
  90. package/omega/Agentik_SSOT/audits/dataaudit.yaml +76 -0
  91. package/omega/Agentik_SSOT/audits/debugaudit.yaml +75 -0
  92. package/omega/Agentik_SSOT/audits/dxaudit.yaml +78 -0
  93. package/omega/Agentik_SSOT/audits/featureaudit.yaml +73 -0
  94. package/omega/Agentik_SSOT/audits/flowaudit.yaml +72 -0
  95. package/omega/Agentik_SSOT/audits/logicaudit.yaml +75 -0
  96. package/omega/Agentik_SSOT/audits/motionaudit.yaml +67 -0
  97. package/omega/Agentik_SSOT/audits/perfaudit.yaml +71 -0
  98. package/omega/Agentik_SSOT/audits/refontaudit.yaml +77 -0
  99. package/omega/Agentik_SSOT/audits/retentionaudit.yaml +84 -0
  100. package/omega/Agentik_SSOT/audits/secaudit.yaml +73 -0
  101. package/omega/Agentik_SSOT/audits/seoaudit.yaml +75 -0
  102. package/omega/Agentik_SSOT/audits/uiuxaudit.yaml +61 -0
  103. package/omega/Agentik_SSOT/mcp/mcp-catalog.yaml +136 -0
  104. package/omega/Agentik_SSOT/rules/constitution.md +44 -0
  105. package/omega/Agentik_SSOT/schemas/event.schema.json +45 -0
  106. package/omega/Agentik_SSOT/schemas/task.schema.json +54 -0
  107. package/omega/Agentik_Tools/README.md +42 -0
  108. package/omega/Agentik_Tools/registry.json +15 -0
  109. package/package.json +43 -0
@@ -0,0 +1,46 @@
1
+ # Omega OS — arborescence manifest.
2
+ # A scheduled check (automation-educator) compares the live tree to this file
3
+ # every hour and reports drift. This is the contract for the 8-block rack.
4
+
5
+ version: 1
6
+ master: ~/Omega
7
+
8
+ blocks:
9
+ Agentik_SSOT:
10
+ nature: truth
11
+ git: true
12
+ children: [rules, skills, commands, audits, schemas, mcp, prompts]
13
+ Agentik_Engine:
14
+ nature: engine
15
+ git: true
16
+ children: [omega_engine, tests]
17
+ Agentik_Orchestration:
18
+ nature: definitions
19
+ git: true
20
+ children: [topologies, roles, verifier, router, educators, autonomous, hooks, automations]
21
+ Agentik_Providers:
22
+ nature: wiring
23
+ git: true
24
+ children: [claude, glm, openai, _template]
25
+ Agentik_Coding:
26
+ nature: projects
27
+ git: per-project
28
+ children: [projects, worktrees]
29
+ Agentik_Tools:
30
+ nature: external
31
+ git: false
32
+ children: [bin, knowledge]
33
+ Agentik_Runtime:
34
+ nature: live-state
35
+ git: false
36
+ children: [eventlog, sessions, verdicts, snapshots, memory, locks]
37
+ Agentik_Extra:
38
+ nature: ephemeral
39
+ git: false
40
+ children: [var, staging, etc]
41
+
42
+ rules:
43
+ - master folder holds exactly 8 entries, all prefixed Agentik_
44
+ - no spaces in any path
45
+ - secrets live only in Agentik_Extra/etc/secrets (chmod 700, encrypted)
46
+ - nothing is written outside ~/Omega
@@ -0,0 +1,43 @@
1
+ # Agentik_Orchestration — the definitions
2
+
3
+ > **Nature:** your business definitions · **Lifecycle:** often changes · **Git:** dedicated repo
4
+
5
+ This block holds the **logic**, not the runtime. The engine
6
+ (`Agentik_Engine/`) is generic — it executes graphs of `Task`s and knows nothing
7
+ about "oracles". *This* block declares what an oracle is, which topology runs,
8
+ how the verifier scores, which model serves which role, and which autonomous
9
+ agents exist. You can redesign all of it without touching the engine.
10
+
11
+ ## Contents
12
+
13
+ | Folder | What |
14
+ |---|---|
15
+ | `topologies/` | orchestration graphs — `aisb-oracle-worker.yaml` is one; the engine runs any graph |
16
+ | `roles/` | role definitions — what an `aisb` / `oracle` / `manager` / `worker` / `verifier` does |
17
+ | `verifier/` | the audit gate — `audit-router.yaml` selects audits per task type + the score threshold |
18
+ | `router/` | the model router — maps a task to a required *capability*, then to a provider |
19
+ | `educators/` | the 8 educators — the self-improving layer (see `educators/README.md`) |
20
+ | `autonomous/` | autonomous-agent charters (see `autonomous/README.md`) |
21
+ | `hooks/` | event-driven hooks — react to event-bus patterns |
22
+ | `automations/` | scheduled routines — a cold backstop; the live path is the bus |
23
+
24
+ ## How a mission flows
25
+
26
+ 1. A message arrives (Telegram / CLI). **AISB** (persistent root dispatcher)
27
+ classifies it and routes it to a project **Oracle**.
28
+ 2. The **Oracle** plans — it produces a task DAG for a topology in `topologies/`.
29
+ 3. The **Manager** schedules the DAG: it spawns **Workers**, in parallel where
30
+ their file scopes are disjoint.
31
+ 4. Each Worker reaches `CLAIMED_DONE` → a **Verifier** runs the audit gate
32
+ (`verifier/audit-router.yaml`) → `VERIFIED` or `REJECTED`.
33
+ 5. When every child is terminal the join barrier emits `scope.joinable`; the
34
+ Oracle quality-gates and reports up to AISB; AISB reports to the channel.
35
+
36
+ The engine guarantees steps 4–5 mechanically — see
37
+ [`../../../docs/ENGINE-SPEC.md`](../../../docs/ENGINE-SPEC.md).
38
+
39
+ ## Topology is data
40
+
41
+ `aisb-oracle-worker` is *one* graph. A pipeline, a fan-out mesh, a five-level
42
+ hierarchy — each is another file in `topologies/`. A new orchestration needs a
43
+ new graph, **never new engine code**.
@@ -0,0 +1,29 @@
1
+ # Autonomous Agents
2
+
3
+ > Long-running, channel-bound, self-directed agents — as first-class nodes of
4
+ > the one engine. Not a separate subsystem.
5
+
6
+ An autonomous agent is a `Task`/`Node` with `lifecycle: persistent` and a
7
+ `trigger`. Same reducer, same join barrier, same audit gate, same MCP and
8
+ skills as any mission task. It inherits verified completion and the deadman for
9
+ free.
10
+
11
+ When its trigger fires, an autonomous agent opens a scope and spawns ephemeral
12
+ missions (the normal `aisb-oracle-worker` topology) inside it — then reports to
13
+ its bound Telegram channel and waits for the next trigger.
14
+
15
+ ## Files
16
+
17
+ - `example-agents.yaml` — a charter template plus two worked examples.
18
+ - one `<agent-id>.yaml` charter per agent you register.
19
+
20
+ ## Register an agent
21
+
22
+ 1. Add a charter file here (copy the template in `example-agents.yaml`).
23
+ 2. List its id under `autonomous_agents:` in the install manifest, or run the
24
+ installer's autonomous step.
25
+ 3. The autonomous-agent supervisor (`systemd` service) loads it and keeps its
26
+ persistent node alive.
27
+
28
+ Full design — triggers, charter fields, the persistent-vs-ephemeral deadman
29
+ behaviour: [`../../../docs/AUTONOMOUS-AGENTS.md`](../../../docs/AUTONOMOUS-AGENTS.md).
@@ -0,0 +1,85 @@
1
+ # Autonomous-agent charters — template + two worked examples.
2
+ # One agent per file in production; this file groups examples for reference.
3
+
4
+ # ─────────────────────────────────────────────────────────────────────────────
5
+ # TEMPLATE — copy this block into <agent-id>.yaml and fill it in.
6
+ # ─────────────────────────────────────────────────────────────────────────────
7
+ template:
8
+ id: <agent-id>
9
+ role: <role-name>
10
+ lifecycle: persistent
11
+ charter: >
12
+ A clear, plain-language statement of what this agent holds responsibility
13
+ for, and the boundary of its judgement.
14
+ trigger:
15
+ type: <cron|event|webhook|channel>
16
+ config: {}
17
+ channel:
18
+ telegram_topic: <topic-id> # where it listens AND reports
19
+ budget:
20
+ max_iterations: 5
21
+ heartbeat_interval_s: 300
22
+ provider: <provider-id> # e.g. glm for triage; missions escalate
23
+ allowed:
24
+ skills: []
25
+ mcp: []
26
+ topologies: [aisb-oracle-worker]
27
+ guardrails:
28
+ may_spawn_missions: true
29
+ may_ship: false
30
+
31
+ # ─────────────────────────────────────────────────────────────────────────────
32
+ # EXAMPLE 1 — a support agent bound to a support channel.
33
+ # ─────────────────────────────────────────────────────────────────────────────
34
+ support-agent:
35
+ id: support-agent
36
+ role: customer-support
37
+ lifecycle: persistent
38
+ charter: >
39
+ Watch the support channel. Triage every inbound message, draft a reply, and
40
+ for anything that needs a code change open a mission against the relevant
41
+ project. Never close a thread the customer has not confirmed.
42
+ trigger:
43
+ type: channel
44
+ config: { telegram_topic: 4012 }
45
+ channel:
46
+ telegram_topic: 4012
47
+ budget:
48
+ max_iterations: 5
49
+ heartbeat_interval_s: 300
50
+ provider: glm
51
+ allowed:
52
+ skills: [classify-intent, draft-reply, rag-route]
53
+ mcp: [filesystem, github, linear]
54
+ topologies: [aisb-oracle-worker]
55
+ guardrails:
56
+ may_spawn_missions: true
57
+ may_ship: false
58
+
59
+ # ─────────────────────────────────────────────────────────────────────────────
60
+ # EXAMPLE 2 — a growth agent on a daily schedule.
61
+ # ─────────────────────────────────────────────────────────────────────────────
62
+ growth-agent:
63
+ id: growth-agent
64
+ role: growth
65
+ lifecycle: persistent
66
+ charter: >
67
+ Every morning, pull yesterday's product metrics, find the single biggest
68
+ regression or opportunity, and open one scoped mission to act on it.
69
+ One mission per day — never a backlog.
70
+ trigger:
71
+ type: cron
72
+ config: { schedule: "0 7 * * *" }
73
+ channel:
74
+ telegram_topic: 4020
75
+ budget:
76
+ max_iterations: 3
77
+ heartbeat_interval_s: 600
78
+ provider: claude
79
+ allowed:
80
+ skills: [rag-route, metrics-read, prioritize]
81
+ mcp: [filesystem, postgres, github]
82
+ topologies: [aisb-oracle-worker]
83
+ guardrails:
84
+ may_spawn_missions: true
85
+ may_ship: false
@@ -0,0 +1,55 @@
1
+ # The Educators — the self-improving layer
2
+
3
+ > Eight generators/compilers. Each takes a high-level intention and produces the
4
+ > correct artifact **into the SSOT**, under the quality gate. They are the
5
+ > factory floor of Omega OS.
6
+
7
+ An educator is itself an agent (a provider call) plus typed code that validates
8
+ and installs the result. The SSOT is the system's genome; the educators are how
9
+ that genome evolves.
10
+
11
+ ## The eight
12
+
13
+ | Educator | Generates & maintains |
14
+ |---|---|
15
+ | `prompt-educator` | the prompts passed between levels (AISB ↔ Oracle ↔ Manager ↔ Worker) |
16
+ | `artifact-educator` | templates for deliverables — reports, docs, components |
17
+ | `skill-educator` | new skills, and the upkeep of the SSOT skill catalog |
18
+ | `coworker-educator` | worker / agent role definitions |
19
+ | `connection-educator` | connector configs — MCP servers, APIs, provider endpoints |
20
+ | `automation-educator` | crons, hooks, reactors |
21
+ | `claudecode-educator` | watches the Claude Code changelog and updates the SSOT + adapters |
22
+ | `loop-educator` | goal-loop and verification patterns |
23
+
24
+ > `claudecode-educator` is critical: when the platform ships a new primitive
25
+ > (the `/goal` episode in the Omega whitepaper is the cautionary tale), this
26
+ > educator detects it and updates the SSOT — the system keeps pace by itself.
27
+
28
+ ## The promotion pipeline — never silent self-modification
29
+
30
+ An educator does **not** write straight to the SSOT. It writes to staging:
31
+
32
+ ```
33
+ educator generates artifact
34
+
35
+
36
+ Agentik_Extra/staging/promotion/ (proposed change, diffable)
37
+
38
+
39
+ audit gate (the Quality Arsenal — same verifier as for code)
40
+
41
+ ├─ score ≥ threshold ──▶ promoted into Agentik_SSOT/ (+ a commit)
42
+ └─ score < threshold ──▶ rejected, findings logged
43
+ ```
44
+
45
+ Above a configurable confidence score, promotion is autonomous; below it, a
46
+ human approves via a Telegram button. Every promotion is a git diff and is
47
+ reversible. The system improves itself — never blindly.
48
+
49
+ ## The feedback loop
50
+
51
+ The learning loop (`SMITH`) reads mission outcomes — success, rework, cost,
52
+ time — and tells each educator what to fix: "the prompt template X causes
53
+ rework", "a skill Y is missing". That is the auto-improvement cycle.
54
+
55
+ > Each educator is scaffolded as a skill spec to be built out. Status: spec.
@@ -0,0 +1,42 @@
1
+ # Topology: aisb-oracle-worker
2
+ #
3
+ # The classic Omega mission graph. The engine executes ANY graph of this shape;
4
+ # this file is DATA, not code. A new orchestration is a new file here.
5
+
6
+ id: aisb-oracle-worker
7
+ description: Intake -> plan -> execute -> verify, with verified completion.
8
+
9
+ nodes:
10
+ - id: aisb
11
+ kind: dispatcher
12
+ role: aisb
13
+ lifecycle: persistent # AISB is the always-on root scope
14
+ - id: oracle
15
+ kind: dispatcher
16
+ role: oracle
17
+ parent: aisb
18
+ - id: manager
19
+ kind: dispatcher
20
+ role: manager
21
+ parent: oracle
22
+ - id: worker
23
+ kind: executor
24
+ role: worker
25
+ parent: manager
26
+ - id: verifier
27
+ kind: verifier
28
+ role: audit
29
+ parent: manager # the gate between a worker's CLAIMED_DONE and VERIFIED
30
+
31
+ edges:
32
+ - { from: aisb, to: oracle } # AISB routes a mission to a project oracle
33
+ - { from: oracle, to: manager } # the oracle plans; the manager coordinates
34
+ - { from: manager, to: worker } # the manager spawns workers
35
+ - { from: worker, to: verifier } # every CLAIMED_DONE goes through the gate
36
+
37
+ policy:
38
+ on_partial: retry_failed # retry_failed | accept_partial | fail_up
39
+ parallelism: scope_disjoint # workers run in parallel only if file scopes disjoint
40
+ worker_budget:
41
+ max_iterations: 3
42
+ heartbeat_interval_s: 180
@@ -0,0 +1,26 @@
1
+ # Audit router — which audits run for which task. The verifier reads this to
2
+ # assemble the audit gate (the CLAIMED_DONE -> VERIFIED transition).
3
+
4
+ version: 1
5
+
6
+ threshold:
7
+ default: 85 # aggregate score (out of 100) required to reach VERIFIED
8
+
9
+ routes:
10
+ - match: { changed: ["*.py", "*.ts", "*.tsx", "*.js"] }
11
+ audits: [lint, types, code-review, runtime-flow]
12
+ - match: { changed: ["*.css", "*.scss", "ui/**"] }
13
+ audits: [code-review, visual-regression, runtime-flow]
14
+ - match: { task_role: worker } # default for any worker
15
+ audits: [code-review, runtime-flow]
16
+ - match: { task_role: oracle } # a dispatcher's "audit" is its barrier
17
+ audits: [scope-integrity]
18
+
19
+ # runtime-flow is MANDATORY on any code-producing task. It starts the real
20
+ # system, hits the endpoints, drives the UI path. No runtime-flow pass => no
21
+ # VERIFIED. This is validate-live — Layer 5 of the safety mesh, and the single
22
+ # mechanism that kills the lying "it's done".
23
+ mandatory: [runtime-flow]
24
+
25
+ # Retry is bounded by the task Budget: REJECTED -> dispatched, up to
26
+ # max_iterations, then an honest FAILED with the findings as evidence.
@@ -0,0 +1,62 @@
1
+ # Agentik_Providers — LLM wiring
2
+
3
+ > **Nature:** the LLM wiring · **Lifecycle:** per-provider · **Git:** versioned (except secrets)
4
+
5
+ Open this block over SSH and you see *all* the LLM wiring — and nothing else.
6
+ One sub-folder per provider, zero business logic.
7
+
8
+ ## The contract
9
+
10
+ Every LLM sits behind one interface. The engine talks only to this contract — it
11
+ never knows whether Claude, GLM or OpenAI is behind it.
12
+
13
+ ```python
14
+ class AgentProvider(Protocol):
15
+ id: str # "claude" | "glm" | "openai"
16
+ def capabilities(self) -> ProviderCapabilities: ...
17
+ def run(self, req: AgentRequest) -> Iterator[AgentEvent]: ...
18
+ def cost(self, usage: Usage) -> float: ...
19
+ ```
20
+
21
+ `AgentEvent` is one normalized stream: `thinking | text | tool_use |
22
+ tool_result | done | error`. Each adapter does exactly one job — translate its
23
+ provider's native API into that stream. ~200–400 lines per adapter.
24
+
25
+ ## Per-provider folders
26
+
27
+ | Folder | Contents |
28
+ |---|---|
29
+ | `claude/` | adapter spec + `config/` — wraps the Claude Agent SDK (the reference adapter) |
30
+ | `glm/` | adapter spec + `config/` — wraps the Zhipu GLM API |
31
+ | `openai/` | adapter spec + `config/` — wraps the OpenAI Agents SDK / Responses API |
32
+ | `_template/` | the skeleton — a new provider in ~5 minutes |
33
+ | `registry.yaml` | active providers, capabilities, concurrency limits, role defaults |
34
+
35
+ ## Per-role assignment
36
+
37
+ Because everything goes through one contract, a provider is assigned **per role**
38
+ in `registry.yaml` — a cheap model for triage (AISB), Claude for code (Worker),
39
+ a *different* model for audit (a genuine Popper falsification: the model that
40
+ graded the code is not the model that wrote it).
41
+
42
+ ## Claude Max account pool
43
+
44
+ The `claude/` provider supports **multiple Claude Code Max accounts**. Because
45
+ Omega OS runs one engine (no tmux fan-out), accounts are not switched globally —
46
+ the adapter holds a pool (`claude/accounts.yaml`) and distributes agent calls
47
+ across accounts, so N Max accounts yield the sum of their rate limits as
48
+ throughput. Manage it with `omega account` and `omega billing`. OAuth tokens
49
+ live in the vault, never here. Full detail:
50
+ [`../../../docs/ACCOUNT-AND-BILLING.md`](../../../docs/ACCOUNT-AND-BILLING.md).
51
+
52
+ ## Adding a provider
53
+
54
+ 1. Copy `_template/` to `<new-provider>/`.
55
+ 2. Implement the adapter against `AgentProvider` (translate native API → `AgentEvent`).
56
+ 3. Add an entry to `registry.yaml`.
57
+
58
+ Zero changes to the engine. Zero changes to the SSOT.
59
+
60
+ > Adapter implementations are build-out; `_template/` and this contract are the
61
+ > spec. The model router (`Agentik_Engine/omega_engine/router.py`) resolves a
62
+ > task to a provider using `registry.yaml`.
@@ -0,0 +1,28 @@
1
+ # Claude Code Max — account pool.
2
+ #
3
+ # Omega OS runs ONE engine, not N tmux sessions. An account is therefore not
4
+ # "switched" globally — the Claude provider holds this pool and assigns each
5
+ # agent call to an account, so N Max accounts give you the SUM of their rate
6
+ # limits as usable throughput.
7
+ #
8
+ # OAuth tokens are NEVER stored here — only a reference into the encrypted vault
9
+ # (Agentik_Extra/etc/secrets/). Add an account with `omega account login`.
10
+ #
11
+ # Copy to accounts.yaml and edit. See docs/ACCOUNT-AND-BILLING.md.
12
+
13
+ version: 1
14
+
15
+ selection: least-used # round-robin | least-used | by-quota
16
+
17
+ pool:
18
+ - id: max-primary
19
+ label: "Primary Max account"
20
+ secret_ref: CLAUDE_OAUTH_max-primary
21
+ weight: 1
22
+ status: active # active | resting | disabled
23
+
24
+ - id: max-secondary
25
+ label: "Secondary Max account"
26
+ secret_ref: CLAUDE_OAUTH_max-secondary
27
+ weight: 1
28
+ status: active
@@ -0,0 +1,30 @@
1
+ # Active LLM providers — the model router reads this file.
2
+ # Credentials are NOT here; they live in the secrets vault.
3
+
4
+ version: 1
5
+
6
+ providers:
7
+ - id: claude
8
+ adapter: claude
9
+ capabilities: [tool_use, streaming, mcp, long_context, vision]
10
+ limits: { max_concurrency: 8 }
11
+
12
+ - id: glm
13
+ adapter: glm
14
+ capabilities: [tool_use, streaming]
15
+ limits: { max_concurrency: 4 }
16
+
17
+ - id: openai
18
+ adapter: openai
19
+ capabilities: [tool_use, streaming, mcp, vision]
20
+ limits: { max_concurrency: 6 }
21
+
22
+ # Default provider per role. The router reasons in required CAPABILITIES first,
23
+ # then picks a provider that has them — so it can fail over if one is saturated.
24
+ default_role_provider:
25
+ aisb: glm # triage — fast and cheap is enough
26
+ oracle: claude # planning — best reasoning
27
+ manager: claude
28
+ worker: claude # writing code — Claude
29
+ verifier: claude
30
+ audit: openai # a different model than the worker — real falsification
@@ -0,0 +1,30 @@
1
+ # Agentik_Runtime — the live state
2
+
3
+ > **Nature:** what is running now · **Lifecycle:** disposable except `memory/` · **Git:** not versioned
4
+
5
+ This block is the runtime truth. Everything here is created and written while
6
+ Omega OS runs.
7
+
8
+ ```
9
+ Agentik_Runtime/
10
+ ├── eventlog/ omega.db — the append-only EVENT LOG, the source of runtime truth
11
+ ├── sessions/ one folder per live session (oracle / worker / autonomous agent)
12
+ ├── verdicts/ audit-gate verdicts (claimed_done → verified / rejected)
13
+ ├── snapshots/ periodic state snapshots — so reduce_task need not replay from genesis
14
+ ├── memory/ memory.db — the DURABLE store (the only thing here worth backing up)
15
+ └── locks/ flocks and semaphores (GLM concurrency, build, audit)
16
+ ```
17
+
18
+ ## What to back up
19
+
20
+ Almost nothing. `eventlog/`, `sessions/`, `verdicts/`, `snapshots/` and `locks/`
21
+ are **disposable** — a fresh deployment regenerates them. The single exception is
22
+ `memory/memory.db` (the durable, cross-mission memory and the hybrid-RAG FTS5
23
+ base). Back that up; let everything else go.
24
+
25
+ ## The event log is the truth
26
+
27
+ `eventlog/omega.db` is append-only. The state of any task is
28
+ `reduce_task(events_for(task_id))`. Delete the event log and you have deleted the
29
+ system's memory of every mission — but you have corrupted nothing, because there
30
+ is no mutable state to corrupt.
@@ -0,0 +1,36 @@
1
+ # Agentik_SSOT — the Single Source of Truth
2
+
3
+ > **Nature:** the neutral truth · **Lifecycle:** stable, promoted · **Git:** dedicated repo, read-only in prod
4
+
5
+ This block is the genome of Omega OS. Everything that defines *how* the system
6
+ behaves — rules, skills, commands, audit definitions, schemas, the MCP catalog,
7
+ prompts — is written here **once**, in a provider-neutral form.
8
+
9
+ No provider folder duplicates the SSOT. Each provider's adapter *compiles* this
10
+ block into that provider's native shape (`omega sync`). A new LLM tomorrow =
11
+ one new adapter; the SSOT is reused as-is.
12
+
13
+ ## Contents
14
+
15
+ | Folder | What |
16
+ |---|---|
17
+ | `rules/` | the constitution and coding/security/ship rules — common to every agent |
18
+ | `skills/` | canonical skill definitions |
19
+ | `commands/` | canonical command definitions |
20
+ | `audits/` | the audit definitions used by the verifier (the Quality Arsenal) |
21
+ | `schemas/` | the JSON contracts — `event`, `task` (and more) |
22
+ | `mcp/` | the MCP catalog + the canonical, neutral MCP config |
23
+ | `prompts/` | prompt templates, generated by the prompt-educator |
24
+ | `VERSION` | the SSOT version number |
25
+
26
+ ## Who writes here
27
+
28
+ The SSOT is **read-only in production**. It is changed only by:
29
+
30
+ 1. **Humans**, via the git repo and a pull request.
31
+ 2. **The educators** (`Agentik_Orchestration/educators/`), which generate
32
+ artifacts into `Agentik_Extra/staging/promotion/` first; the audit gate
33
+ validates; only then is the change promoted into the SSOT.
34
+
35
+ Either way, every change is a diff and is reversible. The system can evolve
36
+ itself — never silently.
@@ -0,0 +1 @@
1
+ 0.1.0
@@ -0,0 +1,69 @@
1
+ # a11yaudit — OmegaOS Quality Arsenal definition.
2
+ # Compact + structured: the Gestalt-Popper shell lives in omega_engine.audit_arsenal;
3
+ # this file supplies only the domain — gather tools, phases, falsification rules.
4
+
5
+ id: a11yaudit
6
+ domain: accessibility
7
+ question: "Can EVERYONE use it — keyboard-only, screen reader, low vision, reduced motion?"
8
+ weight: 1.0
9
+ threshold: 85
10
+
11
+ applies_to:
12
+ roles: [worker]
13
+ changed: ["*.tsx", "*.jsx", "*.vue", "*.svelte", "*.html", "*.css", "*.scss"]
14
+
15
+ # GATHER — deterministic a11y scanners, run first, no LLM.
16
+ # These need a live URL; {path} is the target URL when one is provided.
17
+ gather:
18
+ - name: axe-core
19
+ cmd: "npx --no-install @axe-core/cli {path} --exit 0 --save /dev/stdout || true"
20
+ when: "*"
21
+ - name: pa11y
22
+ cmd: "npx --no-install pa11y --reporter json --standard WCAG2AA {path} || true"
23
+ when: "*"
24
+ - name: lighthouse-a11y
25
+ cmd: "npx --no-install lighthouse {path} --only-categories=accessibility --output=json --quiet --chrome-flags='--headless --no-sandbox' || true"
26
+ when: "*"
27
+
28
+ # PHASES — the agentic falsification pass investigates each.
29
+ phases:
30
+ - id: hinge-keyboard-navigation
31
+ checks: "HINGE — disconnect the mouse and complete the primary user journey keyboard-only; logical tab order matching visual flow, no tabindex>0, no non-interactive element focusable; every button activates with Enter AND Space, links with Enter, Escape closes overlays."
32
+ - id: keyboard-traps-focus-visibility
33
+ checks: "Focus can always escape every modal, dropdown, menu and date picker (no infinite tab loop); focus indicator ALWAYS visible, >=2px and >=3:1 contrast, in light/dark/high-contrast; no outline:none without a replacement."
34
+ - id: wcag-aa-compliance
35
+ checks: "Per page verify WCAG 2.1 AA across the four principles — Perceivable, Operable, Understandable, Robust; lang attribute, valid HTML with no duplicate IDs, reflow at 320px, text resize to 200%; treat the 70% of failures automation misses as the real work."
36
+ - id: screen-reader-semantics
37
+ checks: "Page title, headings, landmarks and list/table structure announced; buttons announce name+role, inputs announce label+type+state; reading order matches visual layout; nothing meaningful hidden from the screen reader, nothing decorative announced."
38
+ - id: aria-correctness
39
+ checks: "First rule of ARIA — if native HTML can do it, ARIA is wrong; custom widgets have correct roles with required children; aria-expanded/selected/checked/current reflect real state; aria-labelledby/describedby/controls reference existing visible elements; aria-hidden never hides visible content."
40
+ - id: semantic-elements
41
+ checks: "Interactive things are real <button>/<a>/<input>, not <div onClick>; landmark elements (<main> once, <nav>, <header>, <footer>) present, labelled when repeated, and wrap all visible content with no orphans."
42
+ - id: color-contrast
43
+ checks: "Normal text >=4.5:1, large text >=3:1 against every background it sits on (including over images/gradients and placeholder text); UI component borders, focus rings and meaningful icons >=3:1; verify in dark mode and forced-colors."
44
+ - id: color-independence
45
+ checks: "No information conveyed by colour alone — links distinguishable without colour (underline/weight), required fields marked with text/asterisk, errors carry icon+text not just red; grayscale the page and confirm nothing is lost."
46
+ - id: form-labels-and-instructions
47
+ checks: "Every input has a programmatic label (label/aria-label/aria-labelledby), placeholder is never the only label; correct input types and autocomplete on personal-data fields; required fields marked visually AND with aria-required; instructions precede the form; related inputs grouped with fieldset/legend."
48
+ - id: error-announcements
49
+ checks: "Inline errors associated via aria-describedby/aria-errormessage and announced without reload, field marked aria-invalid; on submit failure an error summary appears, focus moves to it, error count announced; success confirmed via aria-live; destructive actions confirm and warn of data loss."
50
+ - id: alt-text
51
+ checks: "Informative images have descriptive alt conveying content+purpose; decorative images have alt=\"\" (empty, not missing) and decorative icons aria-hidden; functional/image links/buttons describe the destination or action; complex charts have a text or data-table alternative; SVGs labelled or hidden."
52
+ - id: heading-hierarchy-skip-nav
53
+ checks: "Exactly one <h1>, no skipped levels, headings describe content and are not styled-div fakes; a 'Skip to main content' link is the first focusable element, visible on focus, and lands on a valid landmark/heading."
54
+ - id: focus-management
55
+ checks: "Focus starts at a logical position on load and moves to new content on SPA route change (with page-title update); modals move focus in on open and return it to the trigger on close; deleted content moves focus to a logical neighbour; focus never silently lost to <body>."
56
+ - id: motion-and-touch-targets
57
+ checks: "@media (prefers-reduced-motion: reduce) honoured by CSS and JS animations; no auto-playing audio ever, video/carousels have pause, nothing flashes >3x/sec; interactive targets >=44x44px CSS with >=8px spacing, checked at the smallest mobile viewport."
58
+
59
+ falsification: >
60
+ Automated tools catch ~30% of failures — a "0 violations" report means 70%
61
+ are INVISIBLE to automation, not absent. Every PASS must cite >=3 concrete
62
+ manual checks (keyboard-only walkthrough of the flow, computed contrast ratio,
63
+ grayscale test, prefers-reduced-motion toggle) with verbatim observations.
64
+ Categorise findings as VISUAL-vs-SEMANTIC, MOUSE-vs-KEYBOARD,
65
+ SIGHTED-vs-SCREEN-READER, DESKTOP-vs-MOBILE or DEFAULT-vs-PREFERENCE. An
66
+ axe-core contrast finding near the 4.5 threshold must be confirmed by
67
+ computing the exact ratio. Bias toward FAIL — the excluded users never complained.
68
+
69
+ fix_loop: true