How RoutineOS maps to Rails, Django and Laravel
Web frameworks gave apps a standard shape. RoutineOS gives Claude routines one, and borrows the idea, not the code. This map shows which RoutineOS part matches which framework idea, and where the match stops.
Models, jobs, views and the rest
Only the Rails, Django model and Laravel queued jobs and scheduling mappings come from the repo's references/rails-map.md. The other cells are our own analogy, unchecked, and not a claim made by any of those frameworks.
| RoutineOS | Rails | Django | Laravel |
|---|---|---|---|
| Routine type | App template | Project template | Starter kit |
| Records and the store | Models, database | Models, ORM | Eloquent |
| Settings | Config, credentials | Settings | Config, .env |
| Producers (the prompt or a script) | Jobs | Management commands | Queued jobs |
| Gates | before_action, approvals | Permissions, admin actions | Policies, gates |
| The Desk | Views | Templates | Blade views |
| The command line | rails g, console | manage.py | artisan |
In RoutineOS terms: a Desk is the view, and a gate is the check before an action leaves. A routine's schedule is a cron in UTC, and its settings and connectors hold the config. Connectors hold authentication, so no secrets go in the store or the prompt.
Convention over configuration
- Conventions. A routine has a
routine.toml, a prompt, typed settings and a README, the way an app has config, routes and views. - Generators.
routineos.py newscaffolds the same files every time. - A linter as the guard rail. It fails on a setting with no default, a schedule faster than hourly, or a prompt without the untrusted-data clause.
- Checks before actions. A gate works like a before_action: a pending record, then a later run resumes.
For the console idea, lint and doctor check a routine and your setup. A dry-run mode is planned, not built.
Generators and checks are the part a Rails person finds familiar first. Try routineos.py new my-watch --from-template watch.
Five places the analogy stops
- No schema enforcement. The artifact database has no joins and does not validate shape, so the prompt and lint carry the schema.
- No migrations tool. Version a record shape with a schema field and have the prompt tolerate older shapes.
- No long-running process. Every run is a fresh sandbox with no in-memory state and no documented overlap guard, so design reruns to be safe to repeat.
- Coarse scheduling. One hour is the minimum interval, in UTC.
- The runtime is a model. A run can misread a page, so health records compare parsed counts with claimed counts.
RoutineOS does not borrow an ORM, migrations, a package ecosystem or a server, and does not claim parity with any of them. For the other tools people weigh it against, see compare.
Try the generator
Install the plugin in Claude Code and scaffold a routine with new. Then read the folder it writes.