ATLAS Academy
All courses & kitsBuild a Safe AI Operator
Cover of Build a Safe AI Operator: a shield with a check mark.

First lessons

  1. 0.1The week-one failure
  2. 0.2The eight rules
  3. 1.1Collectors only read
  4. 1.2Unknown is not OK

Course

Build a Safe AI Operator

Build an AI agent for your business that picks actions from a closed list you define, waits for your approval on anything you haven't cleared to run alone, and refuses five kinds of action in code: moving money, DNS, deleting, revoking keys and changing itself.

Level
Builder: Python You write, or learn to write, some Python. Not a no-code course.
Format
Video lessons, PDF, Files (zip)
  • A freelancer organizing client work
  • A local service business handling inquiries

Free lesson on this topic: Ollama vs llama.cpp vs vLLM vs NIM vs TensorRT-LLM on DGX Spark (opens YouTube)

Build a Safe AI Operator

$20 one-time

Format
Video lessons, PDF, Files (zip)
Delivery
Access page, right after checkout
Licence
One purchase covers one household
Refunds
14-day money-back guarantee
Buy for $20
  • 14-day money-back guarantee
  • Instant download after payment
  • Secure checkout by Stripe

After Stripe checkout you land on your own access page with every file. Each download link works for 7 days; open the page again for fresh links. Lost it? Recover it with your Stripe receipt.

Before you pay

What do I receive?

Video course: 28 narrated video lessons of 4 to 8 minutes each, plus the written guide (PDF) and a Python starter agent

Every file, listed

Can I run it?

  • Level: Builder: Python. You write, or learn to write, some Python. Not a no-code course.
  • You need: Some Python, or the patience to learn it with Claude beside you
  • Last checked: 11 Oct 2026
  • Not for: Anyone looking for a no-code tool. The course builds in Python.

Who it's for, and who it isn't

What else costs money?

This title: $20, paid once. No subscription.

Nothing else from ATLAS Academy: no subscription, no renewal, no add-ons. If a tool under You need has paid plans, that company sets the price.

How do I get my files back later?

Checkout ends on your own access page with every file. Each download link works for 7 days; open the access page again for fresh ones.

Lost the page? Recover it with the email your Stripe receipt went to and the receipt number on it.

Sneak peek

Look inside before you buy

Cut from the files you get after checkout. Nothing here is a mock-up.

Lesson 0.1: The week-one failureThe first 60 seconds of a 4-minute lesson, as it plays on your access page

The guide

Pages 1, 2, 4 and 5 of 93, exactly as they print. Select a page to see it full size.

The starter agent (zip)

Every file in the zip, 30 in all.

  • safe-operator/.gitignore106 B
  • safe-operator/README.md7 KB
  • safe-operator/pyproject.toml998 B
  • safe-operator/safe_operator/__init__.py234 B
  • safe-operator/safe_operator/__main__.py128 B
  • safe-operator/safe_operator/actions.py3 KB
  • safe-operator/safe_operator/agent.py5 KB
  • safe-operator/safe_operator/approvals.py6 KB
  • safe-operator/safe_operator/catalog.py4 KB
  • safe-operator/safe_operator/cli.py7 KB
  • safe-operator/safe_operator/collectors/__init__.py210 B
  • safe-operator/safe_operator/collectors/sales.py5 KB
  • safe-operator/safe_operator/collectors/website.py2 KB
  • safe-operator/safe_operator/contracts.py6 KB
  • safe-operator/safe_operator/db.py2 KB
  • safe-operator/safe_operator/executor.py8 KB
  • safe-operator/safe_operator/llm.py5 KB
  • safe-operator/safe_operator/pause.py2 KB
  • safe-operator/safe_operator/secrets.py2 KB
  • safe-operator/safe_operator/tiers.py1 KB
  • safe-operator/safe_operator/untrusted.py2 KB
  • safe-operator/tests/conftest.py3 KB
  • safe-operator/tests/test_agent.py4 KB
  • safe-operator/tests/test_approvals.py2 KB
  • safe-operator/tests/test_catalog.py2 KB
  • safe-operator/tests/test_collectors.py4 KB
  • safe-operator/tests/test_contracts.py2 KB
  • safe-operator/tests/test_executor.py8 KB
  • safe-operator/tests/test_tiers.py875 B
  • safe-operator/tests/test_untrusted_and_secrets.py3 KB
# safe-operator

The starter agent for **Build a Safe AI Operator** by Miro.

It is a small AI operator for a small business. It watches your website and
your sales, shows what it saw to a language model, and lets the model suggest
**one action by name** from a closed menu. Then code, not the model, decides
whether that action may happen at all.

It is built to be unable to burn you:

- it ships in **watch-only mode**, where nothing can act;
- it has **one** function that performs actions, and that function checks
  everything, in a fixed order, every time;
- five kinds of action (moving money, DNS, deleting, revoking keys, changing
  its own code) are **permanently denied** in code;
- an unanswered approval request **expires**. It never runs on a timeout.

This is course code. It is small on purpose, so you can read all of it in an
evening and change it with confidence.
The first 20 of 156 lines of README.md

Contents

Every count, in one table

Counted from the files on 1 Oct 2026.

FormatVideo course: 28 narrated video lessons of 4 to 8 minutes each, plus the written guide (PDF) and a Python starter agent
WatchOn your access page, in the browser, or download each lesson
Guide93 pages, A4
Lessons28 lessons in 10 modules, plus a bonus chapter
Starter agentPython 3.11 or newer, with tests
You needSome Python, or the patience to learn it with Claude beside you

How it works

From checkout to your first lesson

  1. Pay once

    Buy opens Stripe's secure checkout. We never see your card details.

  2. Open your access page

    You land on it right after checkout, with every file.

  3. Watch the first lesson

    First up: The week-one failure (Module 0).

  4. Come back any time

    Each download link works for 7 days. Open the page again for fresh links.

What you will finish

The finished project

A small Python agent running on your own computer: a watch command that checks a website and a sales source and reports UNKNOWN for anything it can't read, a closed menu of action names the model picks from, and an approval queue where an action waits for you, runs once when you approve it, and leaves a receipt.

The starter's approval flow, run on 11 Oct 2026: a proposed customer reply shows its dry run and its expiry, is refused while watch-only mode is on, runs once when approved with watch-only off, and can't be approved a second time.

What you'll be able to do

A video course with a written guide (PDF) and a Python starter agent, by Miro, on the eight rules his own agent, ATLAS, runs on. You build a small operator that watches first, picks actions from a closed list, asks before any action you haven't cleared to run on its own, and says "unknown" instead of guessing. Each lesson ends with one exercise on the starter agent.

  • Write checks that only read, and that report UNKNOWN when they can't see, never "fine".
  • Give the model a closed menu of actions, with every argument validated, so it picks a name from your list instead of writing code or commands.
  • Set tiers in code: runs by itself, asks you first, or never. Silence never counts as a yes.
  • Keep emails and web pages from giving your agent orders, and keep keys out of the prompt.
  • Put it to work: a receptionist, a content engine and laptop control, each with receipts.

What you get

Every file the purchase delivers, as listed on your access page.

  • 28 video lessons

    Watch on your access page or download. The first ones:

    • The week-one failure
    • The eight rules
    • Collectors only read
  • PDF

    Build a Safe AI Operator (PDF, 93 pages)

  • Download (zip)

    safe-operator starter agent (zip)

Beyond the free material

What the full course adds

What the full course adds

  • Organised files The starter agent as one Python package, one file per rule: catalog, tiers, approvals, executor, untrusted input, secrets, kill switch.
  • Full instructions 28 narrated video lessons and a 93-page guide.
  • Practice tasks An exercise on the starter agent at the end of each lesson.
  • Expected outputs The starter's README says what each command prints, and its test suite checks each of the eight rules.

Exactly what you get

In the box

  • Narrated video lessons · 4 to 8 minutes each
  • Written guide (PDF) · 93 pages, A4
  • Starter agent (zip) · A Python package with its tests, a README and three demo actions, one per tier

Human review is the method

The approval step, shown

  1. The request

    A customer asked when their order ships. The operator proposes reply_to_customer for thread t1, with the reason "customer asked when it ships" and a one-hour expiry.

  2. The draft

    dry run: would reply on thread t1 with: Thanks, it ships Monday.

  3. It stops here for review

    The proposal waits in the pending list with its reason and expiry. Nothing has run. While watch-only mode is on, even an approval is refused.

  4. If you approve

    With watch-only off: "approved #1 by miro; handing it to the executor", then "done: (demo) replied on thread t1". A second approval is refused: it is claimed.

  5. If nobody answers

    expires in 3600s. If nobody answers, it simply does not run.

What this control doesn't do. The demo actions describe what they would do and touch nothing. The gate covers actions that go through the executor; it doesn't check whether the reply says the right thing. You read the dry run before you approve.

If you get stuck

Troubleshooting preview

Working as designed approve says watch-only mode is on
Example input
python -m safe_operator approve 1 --by miro
What you see
refused: watch-only mode is on; nothing may act

This is the default, on purpose. For one test, run the command with WATCH_ONLY=false. Only false, 0, no or off turn it off; a typo leaves it on.

Working as designed The same approval is refused the second time
Example input
WATCH_ONLY=false python -m safe_operator approve 1 --by miro, twice
What you see
cannot approve #1: it is claimed

An approval runs once. Propose the action again if you need it again.

Working as designed An action name is refused
Example input
python -m safe_operator propose wire_money --params '{}' --reason x --ttl 60
What you see
not proposed: unknown action 'wire_money'

Only actions registered in the catalog can be proposed. Add a new one in actions.py with a strict params table, starting at Tier.ASK.

Setup issue Sales reads UNKNOWN
Example input
python -m safe_operator watch --url https://example.com
What you see
sales_today: UNKNOWN ... SALES_API_KEY is not set, so sales can't be read

Correct until you connect a source: no number is shown when it can't be read. Set a restricted, read-only key and point SALES_API_URL at your provider (collectors/sales.py).

And 1 more like these.

Tested with

What was checked, and when

  • safe-operator starter agent · Python 3.14.7, pytest 9.1.1, httpx 0.28.1 checked 11 Oct 2026

    All 82 tests passed. The README's propose, pending, approve and watch commands printed what the README describes.

    An automated run on the starter zip in Miro's vault

Curriculum

Every section, listed

Each lesson, note or file, in the order you'll meet it.

Module 0

Why AI agents burn people

  • 0.1The week-one failure
  • 0.2The eight rules

Module 1

Eyes before hands

  • 1.1Collectors only read
  • 1.2Unknown is not OK
  • 1.3Watch-only mode

Module 2

Never guess a number

  • 2.1Fresh reads
  • 2.2"I can't reach Stripe" beats a wrong number

Module 3

The closed catalog

  • 3.1The model picks names, not code
  • 3.2Closed arguments too

Module 4

Tiers

  • 4.1Auto, ask, never
  • 4.2Things that are never allowed
  • 4.3Dry run and undo

Module 5

Approvals that can't be faked

  • 5.1One approval card, one tap
  • 5.2Silence is never consent
  • 5.3Earning autonomy

Module 6

Everything it reads is untrusted

  • 6.1Prompt injection in the wild
  • 6.2Wrapping untrusted text
  • 6.3Security alerts are untrusted too

Module 7

Secrets and least privilege

  • 7.1Keys never touch the prompt
  • 7.2Restricted keys
  • 7.3Which devices may talk to it

Module 8

Watch the watcher

  • 8.1Guard the machine your agent lives on
  • 8.2The kill switch
  • 8.3Deploys that roll back

Module 9

Put it to work

  • 9.1An AI receptionist
  • 9.2A content engine, with receipts
  • 9.3Laptop control
  • 9.4Your weekly report

Bonus

  • From course to client: selling a safe operator to a local business

Is it right for you?

Who it's for

  • Founders, freelancers and technical small-business owners who want an agent that does real work.
  • People who have seen "AI team runs my company" videos and want a version built around approval gates, a closed list of actions and a kill switch.

Who it isn't for

  • Anyone looking for a no-code tool. The course builds in Python.
  • Anyone hoping for an agent that acts on its own from day one. This course earns autonomy step by step.

Pairs well with

Claude + Obsidian Vault Kit

Keep your clients, projects and prompts in one vault your operator's Claude can read.

Asked before buying

Something else? Write to Miro.

Is the starter agent the ATLAS code?

No. It was written fresh for the course, small on purpose so you can read all of it in an evening. Every pattern is shown on it with made-up names.

Does the course include videos?

Yes. 28 narrated video lessons, to watch on your access page or download, plus the written guide (PDF, 93 pages) and the starter agent (zip).

Will it scan or test other people's systems?

No. The material is defensive only: scan networks you own or have permission to scan.

Refunds and licence

Refunds

14-day money-back guarantee: if it isn't useful, email us within 14 days of purchase for a full refund, no questions asked. Refund policy

Licence

One purchase covers one household: everyone who lives in the buyer's home may use the guides and printables. Please don't resell or share them publicly. The buyer must be an adult. We never ask for a child's name, age or email.

Help

What help is included

Access help

  • A lost access page: write from the address you paid with and the link is sent to that address.
  • A download link that has expired: open your access page again; it makes fresh links each time.
  • A file that won't download, unzip or open.

What you can report

  • A mistake in the material: a step that doesn't match what the product says, or a broken link inside a file.
  • A workflow or starter file that doesn't import, run or give the result its guide shows when you use the guide's own made-up test data.
  • Questions about what a product contains, before or after you buy.

Not included

  • Setting up, hosting or adapting a workflow or agent for your own business, accounts or data. That is implementation work, not part of a purchase.
  • Changes in other companies' tools (n8n, Docker, Obsidian, Claude, Google, Stripe). Each guide says when its screens were last checked and points to the tool's own help.
  • Legal, tax, financial or medical advice.

Reporting a broken workflow

  1. Write from the address you paid with, through the contact page, and include your Stripe receipt number if you have it.
  2. Name the product and the lesson, chapter or file.
  3. Say what you did, what the guide says you should see, and what you saw instead. Paste the exact error text.
  4. Never send passwords, API keys or a real customer's details. Use the guide's made-up test data.

When to expect a reply

Miro replies by email within 2 business days.

Back to all courses & kits

Build a Safe AI Operator$20, 14-day money-back guarantee
Buy for $20