03 / ecosystem

your product ships.
does anyone know?

adauto is a local HTTP server with 6 tools. It generates developer marketing content, tracks what gets upvotes, and only posts after you approve it.

~$0.00034/post · runs on your machine · 0 auto-posts ever

adauto — campaign runlive
adauto demo
$ adauto run --campaign deepstrain-launch
strategy: exploit reddit/r/MachineLearning (score 14.2, 3 posts)
explore: dev.to long-form (untried)
calling deepstrain /eval (2 posts)...
✓ reddit (412 tokens · $0.00014) → pending_approval
✓ dev.to (890 tokens · $0.00030) → pending_approval
$ adauto review
reddit post — [a]pprove [s]kip [e]dit [v]iew full
> a ✓ approved
dev.to post — [a]pprove [s]kip [e]dit [v]iew full
> e [edit mode] → approved
$ adauto post deepstrain-launch
✓ posted reddit · ✓ posted dev.to · total: $0.00044
~$0.00034
per post
~208
tokens / GET /
4
platforms
0
auto-posts ever
// the flywheel
gets smarter with every post
01
strategy

exploit/explore algorithm picks platform + subreddit + post_type based on prior engagement scores. New install → full explore. After 2 posts → starts exploiting what works.

02
generate

deepstrain /eval writes platform-native content: Reddit prose, dev.to tutorial, Twitter thread. Injects top-performing examples as few-shot context.

03
approve

content lands in pending_approval. You read it, edit it, or skip it. Nothing moves without `adauto approve`. No exceptions, no bypass flags.

04
post

approved items publish with platform credentials you control. Rate-limiting respects platform ToS. Post URLs stored locally for engagement polling.

05
learn

adauto polls platforms for upvotes and comments. Scores each post_type. Next `run` call automatically picks the best-scoring style for the platform.

exploit/explore: with 0-1 historical posts → explores all post_types. With ≥2 → exploits the best-scoring type for that platform+subreddit pair. Score = upvotes + 3×comments. You can override at any time with --post-type.
// approval gate

every post touches
your eyes first.

The approval gate is not a setting. It's architecture. There is no flag, no config option, and no API call that bypasses it. Generated content goes to pending_approval. It stays there until you say otherwise.

[a]pprovemoves to approved queue, will publish on next `post` call
[s]kipremoves from queue, learning data not affected
[e]ditopens inline editor → edit title + body → auto-approves
[v]iewrenders full post before deciding
[q]uitpauses review, picks up later — nothing lost
// platforms
Reddit

subreddit targeting · flair support · score tracked per subreddit

dev.to

markdown · front matter · series support · read_time estimate

Twitter/X

thread splitting · char limit · hashtag injection

HN (Show)

Show HN: format · no hype words · minimal CTA

~/.adauto/campaigns/deepstrain.toml
[campaign]
product = "deepstrain"
tagline = "autonomous AI agent for developers"
install_cmd = "pip install deepstrain"
[[platforms]]
name = "reddit"
subreddits = ["MachineLearning", "Python", "LocalLLaMA"]
posts_per_day = 2
// demo generation
new · adauto demo

posts with terminal GIFs
perform better.

adauto generates VHS .tape files customised for your campaign, renders them to animated GIFs with Charmbracelet VHS, and queues the GIF as a visual asset for the next post batch.

generates a `.tape` matched to your campaign product
shows install → activate → run in terminal
renders GIF via `vhs` (if installed) or queues the tape
attaches GIF path to next post batch as `visual_asset`
01adauto demo generate --campaign deepstrain
02adauto demo render --campaign deepstrain
03adauto run --campaign deepstrain
demos/deepstrain.tape (auto-generated)
Output deepstrain.gif
Set Shell "bash"
Set FontSize 14
Set Theme "Catppuccin Mocha"
Set Width 900
# adauto-generated from campaign config
Type "pip install deepstrain"
Enter
Sleep 3s
Type "deepstrain configure"
Enter
Sleep 1s
Type "strain chat \"fix all test failures\""
Enter
Sleep 6s
# tagline injected from campaign.tagline
# autonomous AI agent for developers
// how adauto works
adauto is not standalone

adauto writes nothing.
deepstrain writes everything.

adauto is a workflow layer, not an LLM wrapper. For every adauto run, it builds a structured prompt, calls POST deepstrain:8765/eval, and parses the JSON back. deepstrain is the engine.

required: deepstrain serve
deepstrain serve --port 8765 # must be running
adauto serve --ds-url http://localhost:8765

Without deepstrain running, adauto generate fails immediately. Use adauto service install + deepstrain service install to auto-start both on boot.

adauto runstrategy engine picks platform + post_type
→ /eval (deepstrain)builds prompt: campaign + tone + examples
← JSON response{title, body, tags, estimated_chars}
→ pending_approvallands in local SQLite, never posts
adauto reviewyou read, edit, skip, or approve
adauto postposts only what you approved
adauto reportengagement score → updates strategy
POST /eval · plan-first for complex queries
simple query → direct execute
POST /eval
{"prompt": "run campaign deepstrain"}
→ calls _tool_run() immediately
{"answer": "2 posts queued", "tool_called": "run"}
complex query → plan → approve → execute
POST /eval
{"prompt": "run all campaigns this week, full cycle"}
{"status": "plan_ready", "plan_id": "a4f2b1c3"}
plan: 1. run → 2. approve → 3. post → 4. report
POST /eval (step 2: execute plan)
{"plan_id":"a4f2b1c3","approved":true}
{"plan_executed": "a4f2b1c3", "result": {...}}
idle_timeout: 1800s → auto-shutdown · OS service restarts on next request via mDNS
adauto.local:8766
mDNS broadcast on LAN — any device on the network can reach it
GET / → ~208 tokens of self-description → any LLM can drive a full campaign
deepstrain.local:8765 · atlas-intel.local:8767 · adauto.local:8766
// 6 tools
POST /exec · GET /
run
free

Reads campaign config, picks the best platform+subreddit+post_type from engagement history, calls deepstrain to write the content. Queues as `pending_approval`. Never posts.

status
free

Pending count, approved queue, per-platform post history, estimated next-run time per cooldown.

approve
free

approve by post_id, by campaign, or `--all`. Content never moves to published without hitting this endpoint. The gate is always on.

post
pro

Publishes approved items. Platform-native formatting — Reddit markdown, dev.to front matter, Twitter thread splitting. Rate-limited per platform. Supports dry_run.

report
free

ROI per post: cost in USD, engagement score (upvotes + 3×comments), cost-per-score. Shows which post_type on which platform delivers the lowest cost-per-score.

demo
pro

Generates a VHS .tape file for your campaign, renders it to a GIF via Charmbracelet VHS, and queues the result as a visual asset for the next post batch.

GET /→ ~208 tokens of self-description · any LLM can drive a full campaign loop
POST /exec · {"tool":"run","args":{"campaign":"deepstrain"}}
POST /approve · {"campaign":"deepstrain"}
POST /eval · natural language fallback for LLM orchestration
adauto.local:8766 · mDNS broadcast on LAN
// quick start
01pip install adauto
02adauto init && adauto serve
03adauto run --campaign my-product
04adauto review
05adauto post my-product
// pricing

free

$0

1 campaign · 3 posts/day · run + status + approve

pip install adauto
1 campaign config
Reddit + dev.to + Twitter
approval gate (always)
engagement learning
pip install adauto

pro

most popular
$12/mo

unlimited campaigns · all platforms · VHS demo generation

everything in free
unlimited campaigns
post + report tools
demo (VHS tape generation)
OS service (auto-start)
LAN mDNS broadcast
get adauto pro

// ecosystem

atlas maps · deepstrain ships · adauto narrates

Three tools, one loop. atlas tells you what your codebase looks like. deepstrain changes it. adauto turns the change into distribution. Each tool knows about the others and cross-references them in its output.