03 / ecosystem
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

exploit/explore algorithm picks platform + subreddit + post_type based on prior engagement scores. New install → full explore. After 2 posts → starts exploiting what works.
deepstrain /eval writes platform-native content: Reddit prose, dev.to tutorial, Twitter thread. Injects top-performing examples as few-shot context.
content lands in pending_approval. You read it, edit it, or skip it. Nothing moves without `adauto approve`. No exceptions, no bypass flags.
approved items publish with platform credentials you control. Rate-limiting respects platform ToS. Post URLs stored locally for engagement polling.
adauto polls platforms for upvotes and comments. Scores each post_type. Next `run` call automatically picks the best-scoring style for the platform.
--post-type.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 lostsubreddit targeting · flair support · score tracked per subreddit
markdown · front matter · series support · read_time estimate
thread splitting · char limit · hashtag injection
Show HN: format · no hype words · minimal CTA
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.
adauto demo generate --campaign deepstrainadauto demo render --campaign deepstrainadauto run --campaign deepstrainadauto 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.
deepstrain serve --port 8765 # must be running
adauto serve --ds-url http://localhost:8765Without 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 postsadauto reviewyou read, edit, skip, or approveadauto postposts only what you approvedadauto reportengagement score → updates strategyrunReads campaign config, picks the best platform+subreddit+post_type from engagement history, calls deepstrain to write the content. Queues as `pending_approval`. Never posts.
statusPending count, approved queue, per-platform post history, estimated next-run time per cooldown.
approveapprove by post_id, by campaign, or `--all`. Content never moves to published without hitting this endpoint. The gate is always on.
postPublishes approved items. Platform-native formatting — Reddit markdown, dev.to front matter, Twitter thread splitting. Rate-limited per platform. Supports dry_run.
reportROI 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.
demoGenerates 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.
{"tool":"run","args":{"campaign":"deepstrain"}}{"campaign":"deepstrain"}pip install adautoadauto init && adauto serveadauto run --campaign my-productadauto reviewadauto post my-productfree
1 campaign · 3 posts/day · run + status + approve
pro
most popularunlimited campaigns · all platforms · VHS demo generation
// ecosystem
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.