# Changelog Adopt

> Claude Changelog Adopt — a daily autonomous self-improvement pass that reads the OFFICIAL Claude Code changelog (the authoritative GitHub CHANGELOG for anthropics/claude-code, with @claudecodelog as a secondary mirror), diffs it against the last version OmegaOS already absorbed, and for each NEW entry decides whether it implies a concrete OmegaOS or system-agent improvement — a new primitive, a doctrine change, an agent-behavior shift, a deprecation to unwind. It classifies each entry (opus), proposes a surgical adoption (what to change, in which file, why — like the manual /loop -> R-LOOP native-loop doctrine move), runs an adversarial anti-fabrication gate (opus, default-reject), writes a self-contained HTML report + Telegram alert for the operator to decide, and — only when ARMED — dispatches each vetted proposal to an oracle behind the full quality gate (In-Review handoff, never auto-Done, never force-push). Auto-adoption is scoped to doctrine (rules.rs), agent identities (agents/*.md), skills, and instal

- Skill: `agentik-os/changelog-adopt` (Agent Skill, multi-file: 7 files)
- Install (CLI): `npx skillmds@latest add agentik-os/changelog-adopt`
- Raw SKILL.md: https://api.skillmd.com/api/skills/agentik-os/changelog-adopt/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Web & Frontend
- Author: agentik-os (https://skillmd.com/u/agentik-os)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/agentik-os/changelog-adopt

---


# Claude Changelog Adopt

The self-improvement loop that keeps OmegaOS current with Claude Code itself. Every day it reads
the one authoritative list of what Claude Code shipped, works out which entries should change how
OmegaOS or its agents behave, and hands you a decision report — the same move we made by hand when
`/loop` shipped and became R-LOOP's native-loop doctrine, now standing and automatic.

It is a **loop** in the R-LOOP sense: a verifiable goal (absorb every new changelog entry), a
memory (the last-absorbed version + a per-entry decision store), and a hard ceiling (it proposes;
the operator, or an armed + gated oracle dispatch, decides — it never silently rewrites the OS).

Complementary to `/ecosystem-watch`: that is the broad, noisy X radar that also feeds the public
@Agentik_os feed. This is the narrow, authoritative source — the official changelog — pointed
straight at OmegaOS self-upgrade, with no marketing side-output.

---

## Pipeline

```
cron (daily) → [1] FETCH  official CHANGELOG (GitHub raw: anthropics/claude-code)
             → [2] DIFF   vs state/last_version → NEW entries only (first run seeds forward)
             → [3] CLASSIFY (claude, opus)  per entry: relevance · category · target surface ·
                                            in_scope · concrete proposal (what/where/why) · 0-10
             → [4] GATE   (claude, opus)  adversarial: is the feature real per the entry text? is
                                          the patch correct, minimal, in-scope, non-duplicative?
                                          default-REJECT on doubt (anti-fabrication, R-VERIFY)
             → [5] REPORT self-contained HTML in ~/.omega/artifacts/  (R-HTML)
             → [6] ALERT  Telegram (Alerts topic) via omega-alert-send.sh
             → [7] ADOPT  (only if ARMED)  dispatch each vetted proposal to an OmegaOS oracle,
                                           bounded (R-LOOP), In-Review handoff — never auto-Done
```

Deterministic control (fetch, diff, version watermark, dedup, dispatch side-effects) lives in
shell + small python. Judgment (classify, propose, refute) lives in the model. The gate is an
INDEPENDENT adversarial pass whose only job is to reject — default-reject on doubt.

## Auto-adoption scope (operator decision, non-negotiable in the runner)

The engine may only PROPOSE auto-patches to these surfaces:

- **Doctrine** — `crates/omega-core/src/rules.rs` (the Laws/Rules SSOT) + its markdown mirror.
- **Agent identities** — `agents/*.md` (oracle, worker, Atlas, Nova/companion, the AISB matrix).
- **Skills** — `skills/<name>/` (new or amended skills, e.g. adopting a new Claude Code primitive).
- **Installer** — `install.sh` parity for any of the above (L0).

A changelog entry whose only sensible adoption touches the **core Rust orchestration**
(`crates/` beyond rules.rs — executor, loop_guard, dispatch, TUI) is classified `surface:
core-rust`, `in_scope: false`, and surfaced as **needs-human** in the report. The engine never
proposes an auto-patch to the compiled core; that stays an explicit operator call.

## Adoption safety rails (non-negotiable)

Acting on OmegaOS itself (dispatching an adoption) requires ALL of:

- `armed` flag present (`~/.omega/state/changelog-adopt/armed`) — the kill-switch. Absent =
  proposals are report-only. `rm` the flag to stop all self-modification instantly.
- the adversarial gate returned `keep=true` for that proposal.
- `in_scope: true` (surface is doctrine/agents/skills/install.sh — never core-rust).
- the entry fingerprint is not already in the seen-store (never adopt the same entry twice).
- the per-run adoption cap (`CA_DAILY_ADOPT_CAP`, default 3) is not exhausted.

Even armed, an adoption is DISPATCHED to an oracle that runs the full quality gate and hands back
In-Review — the operator still approves the merge. The engine proposes and prepares; it never
self-marks Done and never force-pushes (L0, R-VERIFY, R-LOOP).

## Run

```
bash scripts/adopt-run.sh                 # full run (fetch → classify → gate → report → alert)
CA_DRYRUN=1 bash scripts/adopt-run.sh     # never dispatches even if armed (report only)
CA_FORCE_VERSION=2.1.100 bash scripts/adopt-run.sh   # re-process everything newer than X (backfill)
```

Env knobs: `CA_CHANGELOG_URL` (GitHub raw default), `CA_CLASSIFY_MODEL` (claude-opus-5),
`CA_GATE_MODEL` (claude-opus-5), `CA_DAILY_ADOPT_CAP` (3), `CA_DISPATCH_PROJECT` (OmegaOS),
`CA_SEED_VERSIONS` (1 — how many latest versions the FIRST run treats as new).

## Arm / disarm

```
touch ~/.omega/state/changelog-adopt/armed   # allow gated auto-dispatch of adoptions
rm    ~/.omega/state/changelog-adopt/armed    # kill-switch: proposals stay report-only
```

## State (runtime, gitignored — never in the repo, R-ENV)

- `~/.omega/state/changelog-adopt/last_version` — the forward watermark (last version absorbed).
- `~/.omega/state/changelog-adopt/seen.jsonl`   — per-entry decision fingerprints (dedup memory).
- `~/.omega/state/changelog-adopt/armed`         — the kill-switch flag (absent by default).
- `~/.omega/state/changelog-adopt/runs/<date>/`  — per-run raw changelog, new entries, classify,
  gate, report.

## Cron

```
# 08:15 daily — DISARMED by default until the operator arms it.
15 8 * * * PATH=$HOME/.local/bin:/usr/local/bin:/usr/bin:/bin OMEGA_DIR=$HOME/.omega \
  bash $HOME/.omega/skills/changelog-adopt/scripts/adopt-run.sh \
  >> $HOME/.omega/logs/changelog-adopt.cron.log 2>&1
```

