Get cited, not just ranked.

An agent stack that handles research, drafting, publishing, and earned media outreach so your brand shows up wherever AI models look.

What inspired us

SEO is built for a world where humans click links. AEO — Answer Engine Optimization — is built for a world where AI models are the link. The same brands winning on Google are losing inside ChatGPT, Claude, and Perplexity, because what gets cited in AI answers is a different game: structured content, earned mentions, ecosystem presence, and signal across many surfaces — not just backlinks.

We wanted to build the agent stack a small marketing team could actually run to compete in that new game.

What we built

A multi-skill agent system covering the full AEO pipeline:

  • Content publisher — takes finished drafts and syndicates them across owned and third-party platforms with proper canonical tags so the client's domain stays the authoritative source.
  • Quote responder — monitors expert quote platforms like Qwoted and Featured, scores incoming journalist requests against a client profile, and drafts responses for human approval.
  • Media researcher — takes a brief and produces prioritized lists of podcasts and journalists with personalization hooks for outreach.
  • Reddit UGC tooling — surfaces relevant threads and drafts genuine, non-spammy contributions for human review.
  • Front-end — a unified dashboard tying the skills together.

The architecture splits each skill into a thin SKILL.md that calls into a reusable open-source package underneath, so the logic isn't trapped inside the skill — it's usable from CI, cron, or other agents.

How we used the sponsor stack

TinyFish is the agent's main fetching and action layer. It powers browsing and scraping for the research agent, and uses the TinyFish Agent API to automatically publish content to Substack. Browser-native automation turned out to be more reliable than wrangling the inconsistent APIs across our target platforms. Code: src/lib/clients/tinyfish.ts, src/lib/agent/fetcher.ts, src/lib/clients/substack.ts

WunderGraph is the API orchestration layer. The frontend calls a unified interface for analysis, content generation, and result retrieval, with each request delegated to the appropriate operation handler. This kept our frontend clean and let us iterate on the agent backend without breaking the UI contract. Code: wundergraph/operations/analyze.ts, wundergraph/operations/generate.ts, wundergraph/operations/results.ts, wundergraph/wundergraph.config.ts

Ghost is the optional content storage and publishing layer. Generated articles can be pushed as drafts to enhance the "generate → publish" demo workflow. Ephemeral, zero-config Postgres turned out to be exactly the right shape for an agent stack — each skill can spin up isolated storage without wiring up a heavyweight backend. Code: src/lib/clients/ghost.ts

Vapi handles the human-in-the-loop callback layer. When the content drafting skill hits missing information — a stat we can't verify, a quote we need from the founder, a positioning question only the company can answer — Vapi calls the relevant person at the client company and gathers the answer in voice instead of stalling the pipeline in an inbox.

Substack is the final distribution channel. We combine blog posts, podcasts, outreach content, FAQs, and sources into a Substack-ready edition, with support for both draft and publish modes. Code: src/lib/clients/substack.ts, src/components/SettingsForm.tsx, src/components/ResultsView.tsx

Each sponsor tool is doing what it's actually best at: TinyFish for browser-native research and action, WunderGraph for clean API orchestration, Ghost for disposable data, Vapi for voice-based human input, Substack for distribution.

What we learned

The biggest lesson: most of AEO can't be fully automated, and pretending otherwise destroys the thing you're trying to build. Auto-sent journalist pitches get domains blacklisted. Auto-posted Reddit threads get accounts banned. The right pattern is agents drafting, humans approving — and that constraint shaped every skill we built. Vapi specifically let us turn what would have been an automation dead-end (missing information) into a fast, voice-first loop with a real human.

We also learned how much leverage there is in splitting capabilities into small, composable skills rather than one mega-skill. Each of ours has a single job and a single decision loop, which made them faster to build and easier to reason about.

Challenges

Scope. We had four skills, a front-end, and five sponsor integrations to ship, with a team of four (three women, one guy) and a hackathon clock. Platform APIs were inconsistent — some have great docs, some required scraping fallbacks, and some changed access tiers between when we scoped and when we built. Wiring the skills into a coherent front-end while each was still stabilizing was the hardest integration problem.

What's working end-to-end is uncertain at submission time. What's working in concept — the architecture, the skill split, the human-in-the-loop philosophy, the sponsor-tool fit — we're confident in.

Team

Built by four people in a hackathon sprint.

Built With

  • agentic.market
  • anthropic
  • ghost
  • python
  • tinyfish
  • vapi
  • xai
Share this project:

Updates