---
title: Changelog
description: What changed in each RoutineOS version, from 0.1.0 to 0.6.0.
sidebar:
  order: 1
---

The version lives in `.claude-plugin/plugin.json`, and the current version is 0.6.0. The entries for 0.5.0 and 0.6.0 are taken from `CHANGELOG.md` at the repository root, which has the full list; the entries for 0.1.0 to 0.4.0 are taken from the commit history.

## 0.5.0 and 0.6.0

Desk v2 shipped in 0.5.0 (2026-10-30). Templates and packs, and `migrate`, shipped in 0.6.0.

### Templates and packs

- Routine packs: one JSON file, `routineos.pack.v1`, holding a routine's settings, definition, prompt, stages, schedule, gates, learning and Desk. Five `pack` commands: `validate`, `install`, `export`, `list`, `catalog`. See [Pack schema](/reference/pack-schema).
- Install reads a file path or one https URL, writes the folder atomically, connects nothing and prints a connector report (`--json` for JSON).
- Export turns a routine folder into a pack. A round trip gives back the same pack.
- A catalog at `site/templates/index.json` (`routineos.catalog.v1`) with JSON Schemas in `site/templates/schema/`. `pack catalog --check` keeps it current.
- Eight new templates, all unpiloted: `meeting-brief`, `weekly-marketing-report`, `inbox-triage`, `support-gap-digest`, `invoice-exceptions`, `candidate-shortlist`, `content-calendar`, `engineering-digest`. `jobs-watch` and `watch` ship as piloted packs.
- Security: `workspace.name` and `workspace.template` must be slugs, and the Desk config block escapes `<`, `>` and `&`. Packs are refused when they hold control characters, secrets, email addresses, Slack-style ids, unsafe commands, a write connector without a gate, or a stage that reads or writes a people collection. Export refuses symlinks and paths that leave the routine folder.

### Desk v2

- A new shell: Today, Inbox, Approvals, one entry per record type with its views, History and Settings. Keyboard shortcuts, a command palette and a bottom nav on narrow screens. See [Desk routes](/reference/desk-routes#added-in-050) and [Desk](/desk).

## 0.4.0

Self-improving routines (pull request #10).

- Definitions get a `learning` block: signals, thresholds, never-learnable setting names, on by default for new routines.
- `learn`: deterministic tallies and per-item proposals with level, signal and evidence.
- The write contract accepts per-item proposals raised by `learn` only, and a write after a decision is idempotent.
- The Desk gets a Suggestions page with per-item Accept, Reject and Snooze.

See [Learning](/concepts/learning) and [Tune learning](/guides/tune-learning).

## 0.3.0

Pull request #9.

- A record dropped by a settings filter is kept, with its drop reason.
- The jobs-watch role gets a `summary` field.
- A two-pane record page.

## 0.2.0

Pull request #8.

- The proposal contract: `{setting, from, to}`, checked on write and on Accept.

## 0.1.0

Pull requests #1 to #7.

- The `routineos.py` CLI with `new`, `lint`, `doctor` and the `prompt` fragments (gate, action queue, adapter).
- The Desk app shell, the Jobs watch template and the landing page.
- The marketplace manifest.
- The app model (`app.toml`), the capability registry, the permission screen, `app-init`, `permissions`, `platform`, the prompt header and the budget script, and per-routine delivery modes.
- Desk contract fixes: validated view and column ids, create-only gates whose ids carry the run id.
- Desk icons and states.
- Learnings applied from a Hiring Signals run on 2026-10-29.

The 0.1.0 entries span several pull requests without a version bump; the plugin manifest stayed at 0.1.0 until 0.2.0.

## Related

- [Contributing](/contributing)
- [Names and terms](/introduction/names)
