Odsc East 2026
Small Agents, Big Results β ODSC East 2026 workshop. Qwen on OpenRouter + Composio MCP + Skills, in ~150 lines.
Ask AI about Odsc East 2026
Powered by Claude Β· Grounded in docs
I know everything about Odsc East 2026. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
Small Agents, Big Results
Hands-on workshop for ODSC East 2026 β Jack O'Brien, Subconscious.
A working agent built on a small open-weights model in roughly 150 lines of Python. You give it a GitHub repository URL and it returns a structured tour. The model is Qwen3.6-27B via OpenRouter; tools are exposed through Composio's hosted MCP servers; the procedural recipe lives in a local Skill. Each layer is independent β swap the model, the toolkit, or the skill without touching the others.
Contents
- Architecture
- Prerequisites
- Setup
- Workshop tasks
- Part 2 β Subconscious API
- How it works
- Project layout
- Resources
Architecture
Three independent pieces, composed in agent.py:
| Layer | Component | Provides | Wired in |
|---|---|---|---|
| Model | Qwen3.6-27B via OpenRouter | A small open-weights model that supports OpenAI-style tool calling. | client = OpenAI(base_url=...) in agent.py |
| Tools | Composio MCP (GitHub, Gmail, β¦) | Authenticated SaaS APIs exposed through the Model Context Protocol. | streamablehttp_client(...) in agent.py |
| Skill | skills/repo-tour/SKILL.md | A procedural recipe loaded on demand via progressive disclosure. | load_skill_catalog() in agent.py |
Prerequisites
| Requirement | Notes |
|---|---|
| Python | 3.11 or newer |
| Package mgr | uv recommended; pip works |
| OpenRouter | Free signup; small balance or free-tier credits |
| Composio | Free signup; one OAuth connection per service you'll call |
| Time | About 10 minutes from clone to first agent output |
Setup
1. Warm up with Qwen3.6-27B
Open the playground at https://openrouter.ai/qwen/qwen3.6-27b and try a few prompts β plan a refactor, write a tricky regex, explain a stack trace. This is the same model we'll drive in code; the setup is the only thing that changes.
2. Clone and install
git clone https://github.com/subconscious-systems/odsc-east-2026
cd odsc-east-2026
uv sync # or: python -m venv .venv && pip install -e .
cp .env.example .env
3. Try Hermes β the open-source production agent
Before building one from scratch, see what a polished open agent looks like. Hermes Agent (the successor to OpenClaw, by Nous Research) is the open-weights counterpart to closed coding agents β full TUI, MCP support, the agentskills.io skills standard, and any backend model you want, including the same Qwen3.6-27B you tried in Step 1.
Install (Linux, macOS, or WSL2 β native Windows is not supported):
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash
source ~/.bashrc # or: source ~/.zshrc
Configure it to use Qwen via OpenRouter, then start a session:
hermes model # pick: openrouter β qwen/qwen3.6-27b
hermes # interactive TUI
Try a real task β summarize the last 5 PRs in this repo, or read agent.py and explain the loop. Notice the patterns: a model-in-a-loop driver, MCP
tools, on-demand skills, persistent memory. Everything we'll build by hand in
the next steps is here in production form. The full docs are at
https://hermes-agent.nousresearch.com/docs.
4. Configure API keys
OpenRouter β provides the model.
- Sign up at https://openrouter.ai and fund a small balance, or use the free tier.
- Create a key at https://openrouter.ai/keys.
- Set
OPENROUTER_API_KEYin.env.
Composio β provides the tools as an MCP server.
-
Sign up at https://app.composio.dev.
-
Connections β connect GitHub (one-click OAuth).
-
Settings β API Keys β set the key as
COMPOSIO_API_KEYin.env. -
Mint a personal MCP server URL for the GitHub toolkit:
uv run scripts/create_mcp_server.pyThe script prints a
COMPOSIO_MCP_URL=...line. Copy it into.env.
Workshop tasks
Task 1.1 β Tour a GitHub repository
uv run agent.py "Give me a tour of vercel/next.js"
You'll see a trace on stderr:
Β· turn 0: read_skill({"skill_name": "repo-tour"})
Β· turn 1: GITHUB_GET_FILE_CONTENTS({"repo": "vercel/next.js", "path": "README.md"})
Β· turn 2: GITHUB_LIST_DIRECTORY_CONTENTS({"repo": "vercel/next.js", "path": ""})
Β· turn 3: GITHUB_GET_FILE_CONTENTS({"repo": "vercel/next.js", "path": "package.json"})
Β· turn 4: GITHUB_LIST_PULLS({"repo": "vercel/next.js", "state": "closed", "per_page": 5})
...
β¦and a five-section markdown report on stdout. Try other repositories.
agent.py is roughly 120 lines, top to bottom β read it before you move on.
Task 1.2 β Triage a Gmail inbox
A harder task: more tool calls per turn, real data, and no pre-written skill guiding the model.
-
In the Composio dashboard, Connections β connect Gmail (one-click OAuth).
-
Edit
scripts/create_mcp_server.pyto expose both toolkits:TOOLKITS = ["github", "gmail"] -
Re-run the script and replace
COMPOSIO_MCP_URLin.envwith the new URL. -
Run a multi-step prompt:
uv run agent.py "Look at my last 20 emails. Group them by sender, surface \ anything I haven't replied to in over 2 days, and write a one-line summary \ of each thread that needs a reply."
Watch the trace. The model has to search the inbox, paginate, read individual threads, distinguish sent from received, compare timestamps, and synthesize. Without a skill to guide it, expect occasional missteps β that observation is the lesson.
Bonus: mirror repo-tour and write skills/inbox-triage/SKILL.md. Encode
the procedural recipe β search β bucket by sender β check sent folder for
replies β flag awaiting >2d β summarize β and re-run the same prompt. A short
skill turns an unreliable run into a tight, repeatable one. That is the value
Skills provide.
Task 1.3 β Pick any MCP
Composio publishes hundreds of toolkits. Browse the catalog at https://composio.dev/tools, pick something you'd actually use β Slack, Linear, Notion, Stripe, HubSpot, Google Calendar β and repeat the Task 1.2 pattern:
- Connect the service in the Composio dashboard.
- Add the toolkit name to
TOOLKITSinscripts/create_mcp_server.py. - Re-run the script and replace
COMPOSIO_MCP_URLin.env. - Prompt
agent.pyagainst the new tool surface.
The agent loop does not change. The same script handles any MCP-compatible toolkit; only the model's available tools differ. That generality β generic loop, pluggable tools, small model β is the entire point of the workshop.
Part 2 β Subconscious API
Part 1 hand-rolls the agent loop: model call, tool dispatch, message append, repeat. Part 2 hands the loop to Subconscious. You provide instructions and an MCP URL; Subconscious drives the model, calls the tools, and streams the trace into a hosted dashboard.
subconscious_agent.py is about 25 lines β a single client.run(...) call
with no while loop and no tool router.
Follow along in the dashboard
-
Sign up at https://subconscious.dev.
-
Dashboard β API Keys β create one and set
SUBCONSCIOUS_API_KEYin.env. -
Keep the dashboard open in a second tab; you will watch the run live.
-
Kick off a run:
uv run subconscious_agent.py "How many open issues does vercel/next.js have?" -
Switch to the dashboard. The run appears with every model turn, every Composio MCP tool call, and the final answer streaming in. The Composio MCP URL minted in Setup Step 4 is doing the same work as in Part 1 β only the loop driver has moved off your laptop.
Try the Part 1 prompts here too. Same MCP, same tools, fewer lines of code.
How it works
The system prompt contains only skill names and descriptions β never the
bodies. The agent calls a read_skill tool when it decides a skill is
relevant; the SKILL.md body enters context only at that point. MCP tool
results follow the same discipline β fetched on demand, never preloaded. This
pattern is progressive disclosure, and it is what lets a small model
operate productively against a large tool surface without filling its context
with irrelevant material.
To extend the workshop:
- Edit
skills/repo-tour/SKILL.mdor add a new skill folder underskills/. - Add additional toolkits in
scripts/create_mcp_server.py. - Swap
MODELat the top ofagent.pyfor any other OpenRouter-supported model.
Project layout
odsc-east-2026/
βββ agent.py # Part 1 β agent loop (~150 lines)
βββ subconscious_agent.py # Part 2 β Subconscious-driven loop (~25 lines)
βββ scripts/
β βββ create_mcp_server.py # One-time helper to mint a Composio MCP URL
βββ skills/
β βββ repo-tour/
β βββ SKILL.md # Procedural recipe for the GitHub repo tour
βββ .env.example # API key template
βββ pyproject.toml # Dependencies (uv-managed)
βββ README.md
Resources
- Slides and repository β https://github.com/subconscious-systems/odsc-east-2026
- Skills registry β https://skills.sh (
npx skillsadd <owner/repo>/<skill>) - Composio documentation β https://docs.composio.dev
- Model Context Protocol β https://modelcontextprotocol.io
- OpenRouter β https://openrouter.ai
- Subconscious β https://subconscious.dev
Built for ODSC East 2026.
