Skip to main content
June 28, 2026

Goblin & Ghoul: Building an Autonomous Agent Army on $3/Day

7 min read
agentsautomationhermes-agentarchitectureorchestration
open in claude ↗ chatgpt ↗ grok ↗

Goblin & Ghoul Agent Army

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-ghoul returns drafts, not actions. Support replies come wrapped in [SUPPORT DRAFT: review before sending].
  • competitive-pricing-research returns 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:

Ghoul command list

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:

The tools:

The models: