
TL;DR: 12 hours of non-stop conversation with Goblin (my orchestrator agent) while Ghoul (my Apify commander on a separate VPS) built a web scraper, adjusted reporting, handled email and Google Workspace, and ran market research, all for just over $3.00. Here's how the commander model works in practice, the skills that power it, and why I'm done being stuck at a laptop.
The Setup
In my last post, I laid out the architecture:
Goblin: the orchestrator. Runs on my ARM64 VPS (the Command Center), connected to Telegram as my single point of contact. Goblin delegates, gates approvals, and summarizes. Never carries the full payload.
Ghoul: the first Commander, on a separate VPS (code-ghoul box). A delegate_task subagent with pinned skills and a restricted toolset. Ghoul handles everything Apify: actor design, monetization strategy, pre-publish QA, customer support drafts, and scheduled intel scans.
The difference between then and now? I've been running this full-time. Not babysitting it. Running it.
The Numbers That Matter
I spent about 12 hours talking back and forth to Goblin throughout the day, while Ghoul worked independently on a web scraper build, adjusted future reporting pipelines, handled email and Google Workspace tasks, and ran competitive research.
Total cost: just over $3.00.
Let that sink in. A full day of agent-powered development, research, reporting, and email management, from my phone, while I was out running errands, cleaning the house, listening to podcasts, and even at the pharmacy, for less than a coffee.
The secret: DeepSeek V4 Flash via OpenRouter for everything. The quality-to-cost ratio is absurd. I have other models in the stack (Qwen 3.5+ for code/vision, Gemini 3.5 Flash for hard reasoning), but they almost never fire. DeepSeek Flash handles the full workload.
The Skills That Power Ghoul
Ghoul is defined by skills: reusable knowledge packs that load into the subagent's context on delegation. Here's the full roster:
| Skill | What It Does |
|---|---|
apify-ghoul |
Core SME with 5 modes: Architect, Monetizer, QA, Support, Watch |
competitive-pricing-research |
Scans Apify Store for competitor pricing, ratings, runs |
ghoul-commander-routing |
Routes Apify/repo/git work to the right Commander |
commander-build |
Builds new Commanders on the remote VPS |
commander-roster |
Master routing table: pinning which Commander handles what |
apify-intel-agent |
Daily cron that scans Reddit, HN, X, Apify Community for actor intel |
github-pr-workflow |
Full PR lifecycle: branch, commit, open, CI, merge |
github-code-review |
Inline diff review via REST API |
github-issues |
Create, triage, label, assign issues |
systematic-debugging |
4-phase root cause analysis |
test-driven-development |
RED-GREEN-REFACTOR enforcement |
requesting-code-review |
Pre-commit security scanning and quality gates |
Each skill is a self-contained SKILL.md with trigger conditions, exact commands, tool restrictions, and output format. The subagent loads them like a playbook, no prompt engineering required.
Guardrails Built Into Every Skill
The most important design rule: every skill is advisory by default.
apify-ghoulreturns drafts, not actions. Support replies come wrapped in[SUPPORT DRAFT: review before sending].competitive-pricing-researchreturns evidence-backed tables, not opinions. No price is recommended without Store data.- Live web fetch is gated at 3 pages per query, token-trimmed to ~5k each.
- All outbound actions go through Goblin's approval gate. Ghoul writes work-orders as GitHub issues, then Goblin shows me a one-line summary and asks
/approve.
No skill can auto-commit, auto-send, or auto-deploy. The agent suggests. I decide.
Talking to Ghoul 1:1
To skip the routing layer and talk directly to Ghoul about a specific topic, I set up custom Telegram commands:

| Command | What It Does |
|---|---|
/apify |
Actor design, SDK, Crawlee, or Store questions |
/ppe |
Pay-per-event monetization & pricing advice |
/qa_actor |
Pre-publish QA review checklist |
/support |
Draft customer support reply from pasted email |
/help |
Show available commands |
/new |
Start fresh session (new ID + history) |
/stop |
Kill all running background processes |
/status |
Session, model, token & context info |
/resume |
Resume a previously-named session |
/sessions |
Browse and resume past sessions |
/model |
Switch model (persists by default) |
These are configured through the Telegram bot's /setcommands in BotFather. Each one triggers a specific delegate_task to the Ghoul Commander with the right skill loaded.
The Model Strategy
I'm routing everything through OpenRouter Guardrails (docs), which restricts the model pool to only the ones I've explicitly approved:
- Primary: DeepSeek V4 Flash (handles 95%+ of all queries)
- Code/Vision: Qwen 3.5+ (falls through when DeepSeek can't handle image input)
- Hard reasoning: Gemini 3.5 Flash (for complex debugging chains)
The guardrail config means even if a subagent's prompt somehow requests a different model, it gets rejected. Only approved models can respond. This is critical for cost control: one wrong model call on a 10,000-token response chain can blow a day's budget.
Scheduling Without Token Burn
I have several reports scheduled through Hermes cron, but they're designed in a watchdog pattern: no agent runs at all unless something changes.
The apify-intel-agent cron fires daily at 16:00 UTC. It uses no_agent=true mode: a Python script scrapes Reddit, HN, X, and the Apify Community, diffs against the last snapshot, and only produces output if new content was found. If nothing changed, zero tokens burned. The system stays dark until there's something to report.
Same for the Ghoul health checks. Two daily crons (7am/5pm PT) run a static health script that checks: is the SSH tunnel alive? Is the agent process running? Is disk usage under 85%? Only if something's wrong does it produce output. Otherwise, total silence.
This is the secret to running 10+ scheduled jobs for pennies. Be quiet when nothing's wrong.
What I Learned Running This Full-Time
1. I'm not stuck at a laptop anymore. I spent a full day bouncing between the pharmacy, cleaning, reading, listening to podcasts, and still got a web scraper built, competitive research done, reporting adjusted, and Google Workspace handled. All from my phone.
2. Trust, but verify. I don't blindly approve anything. Every Ghoul output gets a one-line summary from Goblin, and I decide. If severity is high, I review the full GitHub issue before /approve. The system accelerates my decisions; it doesn't make them.
3. Cost discipline is a feature, not an afterthought. DeepSeek V4 Flash + gated live fetch + watchdog cron pattern + OpenRouter guardrails = a full day of multi-agent work for $3. If I had let every model query go to GPT-4 or Claude Opus, that same day would have cost $30-50.
4. The learning never stops. I'm already planning the next phase: context window optimization, token limit planning across models, and storage cost analysis for the vector database. I left Fly.io, Supabase, and others due to pricing creep; everything is self-hosted now. The infra is mine.
What's Next
Context memory architecture: planning session windows and token budgets across the model stack. DeepSeek Flash is cheap enough to run long sessions, but some tasks (code generation, hard debugging) need model-specific routing with different context constraints.
Multi-model cost analysis: tracking real per-query costs across the approved model pool so I can optimize routing rules based on actual usage data, not estimates.
Infra consolidation: I've moved everything off PaaS providers. The next step is storage analysis for Qdrant, log retention policies, and backup strategy for the agent VPS.
Resources
The architecture:
- Building an Autonomous Apify Actor Factory with AI Subagents: The original architecture post this builds on
The tools:
- Hermes Agent: The open-source agent framework powering Goblin
- OpenRouter: Multi-provider model gateway
- OpenRouter Guardrails: Model allow-listing for cost control
The models:
- DeepSeek V4 Flash: Primary workhorse
- Qwen 3.5+: Code and vision fallback