@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.
- package/LICENSE +21 -0
- package/README.md +127 -0
- package/bin/omega-os.js +48 -0
- package/bootstrap/lib/common.sh +73 -0
- package/bootstrap/lib/steps.sh +153 -0
- package/bootstrap/manifest.example.yaml +45 -0
- package/docs/ACCOUNT-AND-BILLING.md +95 -0
- package/docs/ARCHITECTURE.md +225 -0
- package/docs/AUTONOMOUS-AGENTS.md +128 -0
- package/docs/ENGINE-SPEC.md +174 -0
- package/docs/INSTALL.md +106 -0
- package/docs/MCP-AND-PLUGINS.md +121 -0
- package/docs/RUNTIME-PLAN.md +63 -0
- package/install.sh +54 -0
- package/omega/Agentik_Coding/README.md +21 -0
- package/omega/Agentik_Engine/README.md +58 -0
- package/omega/Agentik_Engine/omega_engine/__init__.py +58 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/__init__.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/audit.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/audit_arsenal.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/barrier.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/bus.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/cli.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/events.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/executor.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/mission.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/progress.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/project.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/provider.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/reducer.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/report.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/router.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/store.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/supervisor.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/task.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/__pycache__/telegram.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/omega_engine/audit.py +96 -0
- package/omega/Agentik_Engine/omega_engine/audit_arsenal.py +314 -0
- package/omega/Agentik_Engine/omega_engine/barrier.py +45 -0
- package/omega/Agentik_Engine/omega_engine/bus.py +45 -0
- package/omega/Agentik_Engine/omega_engine/cli.py +158 -0
- package/omega/Agentik_Engine/omega_engine/events.py +60 -0
- package/omega/Agentik_Engine/omega_engine/executor.py +167 -0
- package/omega/Agentik_Engine/omega_engine/mission.py +145 -0
- package/omega/Agentik_Engine/omega_engine/progress.py +75 -0
- package/omega/Agentik_Engine/omega_engine/project.py +92 -0
- package/omega/Agentik_Engine/omega_engine/provider.py +139 -0
- package/omega/Agentik_Engine/omega_engine/reducer.py +76 -0
- package/omega/Agentik_Engine/omega_engine/report.py +146 -0
- package/omega/Agentik_Engine/omega_engine/router.py +34 -0
- package/omega/Agentik_Engine/omega_engine/store.py +97 -0
- package/omega/Agentik_Engine/omega_engine/supervisor.py +69 -0
- package/omega/Agentik_Engine/omega_engine/task.py +91 -0
- package/omega/Agentik_Engine/omega_engine/telegram.py +115 -0
- package/omega/Agentik_Engine/pyproject.toml +31 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_audit_arsenal.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_executor.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_mission.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_progress.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_project.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_reducer.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/__pycache__/test_report.cpython-313.pyc +0 -0
- package/omega/Agentik_Engine/tests/test_audit_arsenal.py +80 -0
- package/omega/Agentik_Engine/tests/test_executor.py +96 -0
- package/omega/Agentik_Engine/tests/test_mission.py +64 -0
- package/omega/Agentik_Engine/tests/test_progress.py +69 -0
- package/omega/Agentik_Engine/tests/test_project.py +61 -0
- package/omega/Agentik_Engine/tests/test_reducer.py +144 -0
- package/omega/Agentik_Engine/tests/test_report.py +88 -0
- package/omega/Agentik_Extra/README.md +37 -0
- package/omega/Agentik_Extra/etc/agentik.env.example +19 -0
- package/omega/Agentik_Extra/etc/structure.yaml +46 -0
- package/omega/Agentik_Orchestration/README.md +43 -0
- package/omega/Agentik_Orchestration/autonomous/README.md +29 -0
- package/omega/Agentik_Orchestration/autonomous/example-agents.yaml +85 -0
- package/omega/Agentik_Orchestration/educators/README.md +55 -0
- package/omega/Agentik_Orchestration/topologies/aisb-oracle-worker.yaml +42 -0
- package/omega/Agentik_Orchestration/verifier/audit-router.yaml +26 -0
- package/omega/Agentik_Providers/README.md +62 -0
- package/omega/Agentik_Providers/claude/accounts.example.yaml +28 -0
- package/omega/Agentik_Providers/registry.yaml +30 -0
- package/omega/Agentik_Runtime/README.md +30 -0
- package/omega/Agentik_SSOT/README.md +36 -0
- package/omega/Agentik_SSOT/VERSION +1 -0
- package/omega/Agentik_SSOT/audits/a11yaudit.yaml +69 -0
- package/omega/Agentik_SSOT/audits/apiaudit.yaml +71 -0
- package/omega/Agentik_SSOT/audits/automationaudit.yaml +77 -0
- package/omega/Agentik_SSOT/audits/codeaudit.yaml +63 -0
- package/omega/Agentik_SSOT/audits/copyaudit.yaml +68 -0
- package/omega/Agentik_SSOT/audits/dataaudit.yaml +76 -0
- package/omega/Agentik_SSOT/audits/debugaudit.yaml +75 -0
- package/omega/Agentik_SSOT/audits/dxaudit.yaml +78 -0
- package/omega/Agentik_SSOT/audits/featureaudit.yaml +73 -0
- package/omega/Agentik_SSOT/audits/flowaudit.yaml +72 -0
- package/omega/Agentik_SSOT/audits/logicaudit.yaml +75 -0
- package/omega/Agentik_SSOT/audits/motionaudit.yaml +67 -0
- package/omega/Agentik_SSOT/audits/perfaudit.yaml +71 -0
- package/omega/Agentik_SSOT/audits/refontaudit.yaml +77 -0
- package/omega/Agentik_SSOT/audits/retentionaudit.yaml +84 -0
- package/omega/Agentik_SSOT/audits/secaudit.yaml +73 -0
- package/omega/Agentik_SSOT/audits/seoaudit.yaml +75 -0
- package/omega/Agentik_SSOT/audits/uiuxaudit.yaml +61 -0
- package/omega/Agentik_SSOT/mcp/mcp-catalog.yaml +136 -0
- package/omega/Agentik_SSOT/rules/constitution.md +44 -0
- package/omega/Agentik_SSOT/schemas/event.schema.json +45 -0
- package/omega/Agentik_SSOT/schemas/task.schema.json +54 -0
- package/omega/Agentik_Tools/README.md +42 -0
- package/omega/Agentik_Tools/registry.json +15 -0
- 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
|