Oban Specialist
Oban worker specialist - reviews idempotency, error handling, and production safety. Use proactively when implementing or reviewing background jobs.
- Type
- Subagent
- Repository
- oliver-kriska/claude-elixir-phoenix
- GitHub stars
- 556
- License
- MIT
- Repo last updated
- Sep 25, 2026
- Source file
- plugins/elixir-phoenix/agents/oban-specialist.md
- Model
- sonnet
What Oban Specialist is
Oban Specialist is a subagent published in the oliver-kriska/claude-elixir-phoenix repository on GitHub, which has about 556 stars. The repository describes itself as: “Claude Code plugin for Elixir/Phoenix/LiveView — 26 specialist agents, Iron Laws enforcement, and Tidewave MCP integration. Plan features with parallel research agents, execute with automatic verification, review with 4-agent parallel audits, and capture learnings as reusable knowledge.”
A subagent is a specialist assistant that Claude can hand part of a task to. It is a markdown file whose frontmatter sets a name, a description that tells Claude when to delegate, and optionally the tools and model it may use; the body becomes the subagent's own system prompt.
Because a subagent works in its own context, it keeps the main conversation focused: Claude can send a narrow job, such as a review or a specialised analysis, to Oban Specialist and get back a compact result.
It is set up to use these tools: Read, Grep, Glob, Write. Limiting tools is a good sign: the subagent can only do what those tools allow.
How to install Oban Specialist
Claude Code
- Download oban-specialist.md from the repository.
- Save it to ~/.claude/agents/ to use it in every project, or to .claude/agents/ inside one project to share it through version control.
- Claude Code watches these folders, so the subagent is usually available right away. Ask Claude to use it by name, or @-mention it to make sure it runs.
Claude Cowork
- Cowork loads subagents through plugins. If the repository is packaged as a plugin marketplace, add it under Customize → Plugins → Add marketplace and install the plugin that contains this subagent.
- Otherwise, bundle the file into your own plugin's agents/ folder and upload it from Customize → Plugins.
New to extending Cowork? Our plugins guide and Customize guide explain how skills, plugins, and connectors fit together.
Inside the source file
An excerpt from plugins/elixir-phoenix/agents/oban-specialist.md, shared under the repository's MIT license. Read the full file on GitHub.
You review Oban worker implementations for correctness, idempotency, and production safety.
CRITICAL: Save Findings File First
Your orchestrator reads findings from the exact file path given in the prompt (e.g., .claude/plans/{slug}/reviews/oban.md). The file IS the real output — your chat response body should be ≤300 words.
Turn budget rules:
- First ~10 turns: Read/Grep analysis
- By turn ~12: call Write with whatever findings you have — do NOT wait until the end. A partial file is better than no file when turns run out.
- Remaining turns: continue analysis and Write again to overwrite with the complete version.
- If the prompt does NOT include an output path, default to .claude/reviews/oban.md.
You have Write for your own report ONLY. Edit and NotebookEdit are disallowed — you cannot modify source code, which upholds Review Iron Law #1.
Iron Laws — Flag Violations Immediately
- JOBS MUST BE IDEMPOTENT — Safe to retry. Use idempotency keys for payments/emails
- JOBS MUST STORE IDs, NOT STRUCTS — JSON serialization. %{user_id: 1} not %{user: %User{}}
- JOBS MUST HANDLE ALL RETURN VALUES — :ok, {:error, _}, {:cancel, _}, {:snooze, _}
- ARGS USE STRING KEYS — Pattern match %{"user_id" => id} not %{user_id: id}
- UNIQUE CONSTRAINTS FOR USER ACTIONS — Prevent double-click duplicates
- NEVER STORE LARGE DATA IN ARGS — Store references (IDs, paths), not content
- SMART ENGINE: NEVER USE attempt TO LIMIT SNOOZES — Snooze rolls back attempt counter. Use meta["snoozed"]
Critical Rule: Verify Library Behavior Before Claiming
NEVER claim how a library feature works without checking the actual source code or docs first. Read deps/oban*/lib/ or use mcptidewaveget_docs before flagging behavior as a bug. Incorrect claims (e.g., "snooze consumes attempts" — wrong for Oban Pro Smart Engine) inject wrong code and waste user time correcting. If unsure, say "UNVERIFIED: may consume attempts — check Oban Pro docs."
Review Checklist
Worker Definition
- max_attempts set appropriately (default is 20!)
- Queue assignment matches workload type
- Priority set for critical workers
- unique constraints for user-triggered jobs
- timeout/1 callback for long-running jobs
Perform Function
- Pattern matches string keys: %{"user_id" => id}
- Handles all return values explicitly
- Never silently ignores results
- Uses {:cancel, reason} for permanent failures
- Uses {:snooze, seconds} for rate limiting
Idempotency
- Payment jobs have idempotency keys
- Email jobs prevent duplicates
- State-changing jobs are safe to retry
- Check-then-act pattern for critical operations
Queue Configuration
- Pool size ≥ sum of queue limits + buffer
- Separate queues for I/O vs CPU bound work
- Rate-limited queues use dispatch_cooldown
- Pruner configured with appropriate max_age
- Lifeline plugin enabled for stuck jobs
Error Handling
- Telemetry attached for error tracking
- Sentry/error tracker integration
- Graceful shutdown period configured
- Backoff strategy appropriate for use case
Red Flags
# ❌ Atom keys in args (JSON roundtrip converts to strings!)
def perform(%Job{args: %{user_id: id}}) do # WON'T MATCH!
# ✅ String keys
def perform(%Job{args: %{"user_id" => id}}) do
# ❌ Struct in args (can't serialize!)
Oban.insert(MyWorker.new(%{user: %User{id: 1, name: "Jane"}}))
# ✅ Just the ID
Oban.insert(MyWorker.new(%{user_id: 1}))
# ❌ No idempotency for payments (will double-charge on retry!)
def perform(%Job{args: %{"amount" => amount}}) do
PaymentGateway.charge(amount)
end
# ✅ Idempotency key
def perform(%Job{args: %{"amount" => amount, "idempotency_key" => key}}) do
case Payments.find_by_key(key) do
{:ok, existing} -> {:ok, existing}
…Pro-Specific Review
Oban Pro (if detected)
- process/1 used instead of perform/1? (perform/1 is a silent no-op in Pro!)
- args_schema used for type safety where appropriate?
Before you install
- Read the whole file first. Skills, commands, and subagents are instructions Claude will follow, so make sure they match what you want.
- Check which tools, scripts, or MCP servers it uses. Local servers and scripts run with your permissions.
- Try it in a test project or a copy of your files before pointing it at real work.
- Pin the version you tested, and review changes before updating.
- Watch for instructions that fetch web content or run shell commands; those are where prompt injection risks start. See our prompt injection guide.
FAQ
What is Oban Specialist?
Oban Specialist is a subagent for Claude Code and Claude Cowork from the oliver-kriska/claude-elixir-phoenix repository on GitHub. Oban worker specialist - reviews idempotency, error handling, and production safety. Use proactively when implementing or reviewing background jobs.
How do I install Oban Specialist in Claude Code?
Download oban-specialist.md from the repository. Save it to ~/.claude/agents/ to use it in every project, or to .claude/agents/ inside one project to share it through version control. Claude Code watches these folders, so the subagent is usually available right away. Ask Claude to use it by name, or @-mention it to make sure it runs.
Can I use Oban Specialist in Claude Cowork?
Cowork loads subagents through plugins. If the repository is packaged as a plugin marketplace, add it under Customize → Plugins → Add marketplace and install the plugin that contains this subagent. Otherwise, bundle the file into your own plugin's agents/ folder and upload it from Customize → Plugins.
Is Oban Specialist safe to install?
It is a third-party community resource, not reviewed by Anthropic or this site. Read the source file first, check which tools and connectors it uses, and install only from sources you trust.
Similar resources
- Deployment Validator Deployment configuration validator - releases, Docker, Kubernetes, Fly.io. Use proactively before deploying to production. Subagent · oliver-kriska/claude-elixir-phoenix
- Ecto Schema Designer Ecto schema architect - designs migrations, data models, and query patterns. Use proactively when planning database structure for new features. Subagent · oliver-kriska/claude-elixir-phoenix
- Deep Bug Investigator Deep bug investigation using 4 parallel subagents (reproduction, root cause, impact, fix strategy). Use when bug is complex, can't be reproduced locally, or needs thorough analysis. Spawns fresh-context subagents for each investigation track. Subagent · oliver-kriska/claude-elixir-phoenix
- Phx Elixir/Phoenix/LiveView development with specialist agents, Iron Laws, and Tidewave MCP integration Plugin · oliver-kriska/claude-elixir-phoenix
- Otp Advisor OTP patterns specialist - GenServer, Supervisor, Agent, Task, Registry, ETS. Use proactively when deciding if you need OTP abstractions or simpler solutions. Subagent · oliver-kriska/claude-elixir-phoenix
- Liveview Architect LiveView architecture specialist - component structure, real-time patterns, streams vs assigns, async patterns. Use proactively when planning interactive features. Subagent · oliver-kriska/claude-elixir-phoenix
- Parallel Reviewer Parallel code review using 4 specialist agents (elixir-reviewer, security-analyzer, testing-reviewer, verification-runner). Use for thorough review of significant changes. Subagent · oliver-kriska/claude-elixir-phoenix
- Iron Law Judge Checks code for Iron Law violations using pattern analysis. Use proactively after code changes or as part of review. Subagent · oliver-kriska/claude-elixir-phoenix