Skip to content
5hirishPublic

About

Open-source AI marketing agent. Reads Google Ads, GA4, Search Console, Stripe and 9 more together, writes cited briefs, and with your approval changes things in those tools. Desktop app or self-host, bring your own model. MIT.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

4 stars

Watchers

0 watching

Forks

Latest commit

 

History

1,276 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Duct's insights agent: chat on the left with a proposed change waiting for approval, the brief it wrote on the right

Duct

See the whole picture. Fix it in the same moment.

Duct is an open-source AI marketing agent for product and growth teams. It connects Google Ads, GA4, Search Console, Mixpanel, Stripe and seven more, reads across all of them at once, remembers what it learns about your business, and, with your approval, changes things in those tools for you. The approve tool does not exist in the list the model can call; you press the button.

License: MIT Backend CI App CI Download

⬇️ Download the desktop app and Duct runs the service for you; your model keys never leave your machine. Prefer to run every part of it yourself? Self-host it. Same code, MIT either way.

Free during beta · No credit card · About 10 minutes to connect your tools

Before you install Straight answer
Where do my keys live? Model keys: your OS keychain, never stored on our servers. Tool connections: encrypted at rest, one project at a time, and on your own disk if you self-host.
What can the agent do without me? Read, compare and propose. By default nothing in your accounts changes until you press Apply. How that is enforced.
What does it cost to run? Duct is free during beta. The model is yours: your own API key, or your ChatGPT plan in the desktop app.
Can I run all of it myself? Yes. Self-host it: SQLite on your disk, no account, nothing leaving the machine.
What if Duct goes away? It is MIT. The self-host build is the same code and needs nothing from us.

🤖 Three agents, more on the way

📊 Insights. Ask "why did signups drop last week" and get an answer that reads Google Ads, GA4 and Stripe together, not one at a time. The kind of thing it finds: ROAS up 14%, but Android 7-day retention down 2.4×. You are paying to acquire churners. It pauses to ask when it needs a decision, a verification sub-agent re-checks every number before it reaches you, and the brief it writes is saved, versioned and cites its sources.

🌱 SEO audit. Paste a URL and Duct crawls the site, reads the technical and content signals, and hands back a prioritised report. This is the free front door at getduct.ai: no account needed to run one.

🎬 Content Studio. A plan on a board, a post per card, slides and images generated for each one, and one click to publish to TikTok, Instagram, LinkedIn, YouTube, Threads, X, Facebook, Pinterest and Bluesky. Results come back onto the card, so the next plan learns from the last one.

A week of Content Studio's plan on a board: two posts published, one drafted, two planned The content agent drafting a carousel, its first slide rendered in the right pane

Who it is for today: PMs and growth teams, SEO and content teams, and performance marketers chasing attribution gaps, budget shifts and creative fatigue.

🚧 Coming next: Sales & RevOps (pipeline risk and conversion signals from CRM, calls and product usage), E-commerce & DTC (LTV-versus-ROAS blind spots across Meta Ads, Stripe and RevenueCat), and Customer Success (at-risk accounts from NPS, usage and support signals). Follow along in Issues and at getduct.ai.

🔑 Use your ChatGPT subscription

Sign in with your own ChatGPT plan in the desktop app and Duct runs on it. No API key, no second bill. Or bring keys for Anthropic, OpenAI, Gemini, xAI or anything on OpenRouter, and assign three tiers, Heavy, Standard and Light, so deep analysis and cheap summaries do not pay the same price. Hit a rate limit and Duct steps down a tier instead of stopping.

The OpenAI provider dialog in the desktop app, signed in with a ChatGPT Plus plan

✅ It changes things. You approve.

An agent can propose a change and show you a preview; a person applies it. Pause a campaign, add negative keywords, set a budget or a bid, create a GA4 key event or audience, publish a Tag Manager version, annotate Mixpanel. Every change set is previewed, checked against guardrails you set, applied only after approval, and can be rolled back. The agent can propose and inspect. It cannot approve or apply. That decision lives in code the model never sees, and there is a test that keeps it that way.

A proposed change set waiting for review: the diff, the guardrail check, approve and apply

🧠 It remembers

Duct keeps a memory of your business, your projects and the work it has done: the CPA target, the campaign you told it to ignore (and that you were the one who said so), the finding from last month's brief. Every fact knows when it was true and what replaced it, so an answer can say why it believes something. You can read the whole timeline, correct it, pin what matters, pause it or reset it.

The memory timeline: eight facts about a project, dated, one pinned, one unconfirmed, one superseded by a newer target

🔌 Connectors, and more every month

Google Ads · Google Analytics 4 · Search Console · Tag Manager · Meta Ads · Apple Search Ads · OpenAI Ads · Mixpanel · Microsoft Clarity · GrowthBook · Stripe · RevenueCat · GitHub, with HubSpot next and new ones landing as the agents need them. What each one reads and can change: getduct.ai/integrations.

Google connects with OAuth, read-only unless you grant more; the rest take a key you paste. Credentials are encrypted at rest, scoped to one project at a time, and Duct tells you exactly which permissions it has and which it is missing.

The Connections page: five sources connected and saved to the account, four more waiting

👥 Built for a team

Projects hold the context. Invite collaborators, share a report with them by link, and every brief, audit and plan stays in the project's library, versioned, for the next person who asks.

🖥️ The desktop app

Native on macOS, Windows and Linux. Model keys live in the OS keychain, sign-in runs in your own browser, updates are signed, and it says hello with a mosaic. Download it.

🏠 Self-host it

The same app can be built with the backend inside: SQLite on your disk, loopback only, no account, nothing leaving the machine. Or run the backend on your own server:

git clone https://github.com/5hirish/duct.git && cd duct
make setup
cp backend/.env.example backend/.env.local   # add one model provider key
make serve-backend                            # then, in a second terminal:
make serve-app

CONTRIBUTING.md has the full setup, and desktop/README.md covers the self-host build.

🧭 How it is built

Python and FastAPI on the backend, Next.js in the browser, a Tauri shell on the desktop, one repository. docs/architecture.html is the interactive map: open it in a browser, pick the job you came to do, and it walks you to the files. The Duct Doctrine is the short version of what the project believes, each tenet linked to the code that enforces it.

Path What Read first
backend/ API, agents, connectors, database backend/AGENTS.md
app/ The product UI app/AGENTS.md
desktop/ The native shell desktop/AGENTS.md
site/ getduct.ai site/AGENTS.md
docs/ Engineering records and references docs/README.md

🤝 Contributing

Start with CONTRIBUTING.md. Not touching code? CONTRIBUTOR-PLAYBOOK.md is for design feedback, writing and product proposals. Everyone who helps is credited in CONTRIBUTORS.md. Agent-written contributions are welcome; the PR template asks where an agent helped so a reviewer knows where to look. Security issues go to SECURITY.md, never a public issue.

💬 Community

Questions and ideas go in Discussions, bugs and proposals in Issues. Duct is built by Shirish Kadam; more at shirishkadam.com, @5hirish and Ship with AI on YouTube.

📄 License

MIT, see LICENSE. NOTICE lists what the license does not cover: third-party documentation under docs/guides/, and trademarks.

🏛️ Why "Duct"?

The name is Latin. Ductus: a leading. It is the same word hiding inside aquaeductus. Rome's aqueducts never made a single drop of water. They carried it, on gravity alone, from where it was to where people lived, and some of them are still doing it two thousand years later with no moving parts. That is the whole job description. Your data already exists. Duct is the channel.

It is also why the app greets you with Roman threshold mosaics instead of illustrations of robots: a spring-head at the front door (FONS), an open doorway when you start (SALVE), a dry basin with two curious pigeons when there is nothing to show yet (NIHIL), an aqueduct with one arch missing when a connection fails, the Pompeii guard dog when you are not allowed in (CAVE·CANEM), and this one, for when everything is caught up and the water is running full:

A Roman mosaic: water running full through a channel, a pigeon asleep on the rim, the inscription OTIVM
OTIVM. Leisure. The pigeon is asleep. You have reached the end of the README, so you may be too.

About

Open-source AI marketing agent. Reads Google Ads, GA4, Search Console, Stripe and 9 more together, writes cited briefs, and with your approval changes things in those tools. Desktop app or self-host, bring your own model. MIT.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages