DisSysLab · Micro-Course

Build a team of AI agents.
That never clocks out.

They watch your sources. They brief you. While you work, sleep, travel.

Situation Room — Live Live
CRITICALFed signals surprise rate cut — markets reacting
HIGHOpenAI announces GPT-5 release date
MEDIUMPython 3.14 beta drops with JIT improvements
A running situation room

You describe it in English. This is what you get — live, on your laptop.

🏛️ Situation Room — running right now Live
Briefings — newest first
The complete office

Here's all you wrote.

office.md
Sources
bluesky(max_posts=None, lifetime=None)
al_jazeera(max_articles=10, poll_interval=600)
bbc_world(max_articles=10, poll_interval=600)
Sinks
intelligence_display(max_items=8)
jsonl_recorder(path="situation_room.jsonl")
Agents
Alex is an analyst.
Morgan is an editor.
Connections
bluesky's destination is Alex.
al_jazeera's destination is Alex.
bbc_world's destination is Alex.
Alex's editor is Morgan.
Alex's discard is jsonl_recorder.
Morgan's situation_room are intelligence_display and jsonl_recorder.

No code. Two plain English documents.

The job descriptions

Plain English. That's it.

analyst.md

You are a news analyst who receives posts and articles from social media and news sources. Your job is to assess whether each item is relevant to current world events. If relevant, send to editor. Otherwise send to discard.

editor.md

You are an editor who receives classified articles from the analyst. Your job is to rewrite each article as a concise briefing note with a priority rating. Send to situation_room.

What is an office?

A team that never clocks out.

Cooperating agents. Working continuously. Forever.

You describe the agents. DisSysLab handles everything else.

Sources
🦋BlueSky
📡Al Jazeera
📺BBC World
Agents
🔍
Alex
analyst
inbox
0
Watching sources…
✏️
Morgan
editor
inbox
0
Ready…
Outputs
📊Dashboard
💾Archive

Connect any agent to any agent.

Many → One
📰 News
🦋 Social
📡 Feeds
🔍
Analyst
Fanin
One → Many
✏️
Editor
📊 Dashboard
💾 Archive
📧 Alerts
Fanout
How do you describe an agent?

An agent has a role.
The role is a job description.

analyst.md
You are a news analyst who receives
posts and articles from social media
and news sources.
Your job is to decide if each item is
relevant to current world events.
Send to editor if relevant.
Otherwise send to discard.
Who they are
What their job is
Where to send results
A real job description

Job Description.
It's that simple.

analyst.md

You are a news analyst who receives posts and articles from social media and news sources.

Your job is to assess whether each item is relevant to current world events — politics, economics, science, technology, or humanitarian issues that a senior analyst would want to know about.

For each item, rate its importance: CRITICAL for breaking news requiring immediate attention, HIGH for significant developments, MEDIUM for notable but not urgent, LOW for background information.

If the item is relevant, send to editor with your importance rating and a one-sentence summary. If not relevant, send to discard.

Roles are reusable

A role is a job description.
Not a person.

🔍 analyst.md Role
"…if relevant, send to editor…"
used in 3 offices ↓
📰News Office
🔍
Alex
analyst
"Alex's editor is Morgan"
✏️
Morgan
editor
🏆Sports Office
🔍
Jordan
analyst
"Jordan's editor is Sam"
👔
Sam
CEO
🔬Science Office
🔍
Riley
analyst
"Riley's editor is Dana"
🛡️
Dana
security
📚 The analyst role is identical in all three offices.
Only the wiring changes.
The org chart

Name your agents.
Give each one a role.

office.md — Agents
Alexis ananalyst.
Morganis aneditor.
Miais aneditor.
Samis areporter.
Wiring the office

Write one line.
Make a connection.

office.md — Connections
"Morgan's situation_room are intelligence_display and jsonl_recorder ."
✏️
Morgan
📊
intelligence_display
💾
jsonl_recorder
The complete office

The whole office.
One screen. Plain English.

office.md
bluesky(max_posts=None, lifetime=None)
al_jazeera(max_articles=10, poll_interval=600)
bbc_world(max_articles=10, poll_interval=600)
intelligence_display(max_items=8)
jsonl_recorder(path="situation_room.jsonl")
Alexis ananalyst.
Morganis aneditor.
bluesky's destination isAlex.
al_jazeera's destination isAlex.
bbc_world's destination isAlex.
Alex's editor isMorgan.
Alex's discard isjsonl_recorder.
Morgan's situation_room areintelligence_display and jsonl_recorder.
You've got this

Three things.
That's all you write.

Sources and sinks — where data comes from, where results go — you pick from a library. No writing needed.

1
📋
Roles
"You are a news analyst who receives posts and decides if they're relevant…"
2
👥
Agents
"Alex is an analyst.
Morgan is an editor."
3
🔗
Connections
"Alex's editor is Morgan."
That's everything.
Your turn

Install it.
Two minutes.

terminal
$ python -m venv venv $ source venv/bin/activate $ pip install dissyslab Collecting dissyslab Downloading dissyslab-1.1.1-py3-none-any.whl ... Successfully installed dissyslab-1.1.1 anthropic-0.39.0 ... $ dsl --help Usage: dsl [COMMAND] Commands: list, init, run

One pip install and every office in the gallery is yours. Works on Mac, Linux, and Windows.

Pick one

See what's already built.

terminal — dsl list
$ dsl list Available offices (use dsl init <name> <folder> to copy one): calendar_briefing Daily briefing from your Google Calendar gmail_monitor Watches Gmail and summarizes important threads org_situation_room Live news feed with analyst + editor agents stocks_monitor Tracks a ticker and writes short briefings weather_monitor Pulls forecast and describes the day ahead web_monitor Watches a URL for news-worthy changes news_briefing RSS feeds → analyst → saved briefing image_watermark Watermarks images dropped in a folder sandbox Minimal office for experimenting
▶ GIF slot — capture dsl list live in a fresh venv
Copy it

Make a folder that's yours.

terminal
$ dsl init weather_monitor my_weather Copied weather_monitor → ./my_weather Ready. Next: cd my_weather && dsl run . $ cd my_weather
my_weather/
my_weather/ ├── office.md # the wiring ├── README.md # what it does └── roles/ ├── analyst.md # job description └── editor.md # job description

This folder is yours. Edit any file. Run it when you want.

One-time setup

Add your API key.

my_weather / .env
ANTHROPIC_API_KEY=sk-ant-api03-xxxxxxxxxxxxxxxxxxxxxx # Paste yours on the line above — no quotes.
Get a key (free trial)
Sign up at console.anthropic.com and create an API key. A few test runs cost under $1.
Keep it private
The .env file is gitignored. Don't paste your key into shared chat, code, or screenshots.
Press play

Run it.
Watch it work.

my_weather — dsl run .
$ dsl run . Starting office: my_weather Compiled network: 2 agents, 1 source, 1 sink Running… press Ctrl+C to stop.
MEDIUMforecast.openweather07:02
Clear skies, 58°F / 14°C. Warming through mid-70s by afternoon.
Morgan: Pleasant day. Light jacket in the morning, short sleeves after noon.
LOWforecast.openweather07:07
No precipitation expected in the next 24 hours.
Morgan: Dry day — good for outdoor plans. UV index 6 (high) from 11am–3pm.
HIGHforecast.openweather07:12
Wind gusts up to 32 mph expected tomorrow afternoon.
Morgan: Secure loose outdoor items. Driving conditions may worsen near 3pm.
▶ GIF slot — capture dsl run . streaming for 30 sec in a fresh venv
Make it yours

Change a prompt. Re-run.

Edit a role file in plain English. Run the office again. Watch the output change.

Before — default role
roles/analyst.md
You are a weather analyst.
Write a short, neutral forecast summary.
Send to editor.
MEDIUMClear, 58°F. Warming to mid-70s.
After — you rewrote one line
roles/analyst.md
You are a weather analyst.
Write a cheerful forecast a runner would appreciate.
Send to editor.
HIGHPerfect running weather — 58°F and clear. Cool start, warming by mile 3.

You're ready.

Build something that actually works for you — an office that watches for exactly what you care about.

📈
Stocks you ownprice swings + one-line take
🔬
New research papersarXiv filtered to your topic
📬
Important emailstriage the inbox while you sleep
🌐
A page you care aboutupdates when something changes