Built because my tools wouldn't talk.
Open because it reads all of them.

Every product team runs 8–12 tools. Each one sees a sliver. I got tired of being the integration layer between them, so I wrote one. Then I put it on GitHub under MIT, because a thing that reads your whole business has to be readable back.

FONS. The spring, before anything has run. The app’s front door.

01

The problem nobody talks about

Your analytics tool knows what happened. Your support tool knows who's upset. Your project tracker knows what shipped. Your ad platform knows what you spent. But none of them talk to each other — so you spend hours every week playing translator between tabs, trying to piece together a story that already exists if only someone would connect the dots.

02

So I connected them

Duct reads across your existing tools and synthesizes the cross-tool story that has been hiding in plain sight. Not another dashboard. Not another data warehouse project you will abandon in Q3. And when the answer is “pause that campaign” or “mark that GA4 event,” Duct can prepare the change and show you a preview. It cannot apply it. Only you can. That boundary lives in code, not in a prompt.

03

Then I open sourced it, and here is why

Read access to your ads, analytics and revenue is a lot to hand a tool, and a lot more to hand a tool built by one person. I cannot ask for that trust; I can show the code. Every prompt, every API call and the approval gate itself are in the repository under MIT. Download the app and I run the service for you; clone it and nothing touches me. It is free with your own keys, and stays that way. A paid plan will bundle the models later, for teams that would rather hold no keys at all. What runs where, and what will cost money has its own page.

Where the name comes from

A duct is not a source.
It’s what carries.

Duct is Latin — ductus, a leading. It is the same word sitting inside aquaeductus: water, led. Rome’s aqueducts never made a drop of water. The springs already had it. What Rome built was the channel that carried it, on gravity alone, from where the water happened to be to where people actually lived.

Most of that engineering was invisible. The aqueducts ran underground and unremarkable for miles, and the arches everyone photographs exist only because a valley got in the way. The Nîmes aqueduct fell about twelve metres across fifty kilometres — a slope you could not see standing next to it, held steady over every kind of ground in between.

Your business already has the data. Ads, analytics, search, support, revenue — the springs are fine. What is missing is the channel: something that crosses a dozen APIs and three operating systems and arrives where the decision actually gets made. When an aqueduct works, nobody thinks about the aqueduct. They just have water.

A Roman mosaic: water running full through a channel, a pigeon asleep on the rim, the inscription OTIVM
It is also why the app greets you with Roman threshold mosaics instead of robots. This one is OTIVM, leisure: everything caught up, the water running full, the pigeon asleep.
What Duct does

Three agents today.
More on the way.

Each one reads across the twelve connected sources instead of one at a time, and when the answer is a change, it prepares the change and waits for you. Every connector and every prompt is in the repo, so this list is the list, not a roadmap.

Insights

Ask “why did signups drop last week” and get an answer that reads Google Ads, GA4 and Stripe together. A second agent re-checks every number before it reaches you, and the brief it writes cites its sources.

SEO audit

Paste a URL. Duct crawls the site, reads the technical and content signals, and hands back a prioritised report. It is the free front door: no account needed to run one.

Content Studio

A plan on a board, a post per card, slides and images generated for each, one click to publish to nine networks. Results come back onto the card, so the next plan learns from the last one.

How I work

Principles, not platitudes

Approval before action

The agent proposes. You decide.

Duct reads by default. When it can fix something, it prepares a change set, shows you a preview and a guardrail check, and waits. The agent can propose and inspect; it cannot approve or apply. That decision lives in code the model never sees, and rollback is part of the contract.

Substance over ceremony

Ship the insight, skip the noise

I don’t build features to pad a changelog. Every agent, every connector and every guardrail exists because it saved me real time on a real decision first.

One person, in Spain

Small enough to answer you directly

No megacorp behind this and no support queue in front of it. File an issue and you are talking to the person who wrote the line. That is the whole advantage, and it is why the roadmap is public.

MIT licensed

You can read every line

Every data source, every API call, every prompt, every piece of logic that generates a signal is on GitHub. Not documented and inspectable in principle. Actually there, actually readable, actually forkable.

Shirish Kadam, maintainer of Duct

Shirish Kadam

Maintainer

Product manager and engineer. Most of my career has gone into building products from scratch and scaling them at fin-tech and ed-tech companies, a lot of it AI and ML systems serving millions of users. Open-source contributor throughout.

Every one of those jobs had the same gap: the answer to “why did that number move” was never inside one tool, and somebody senior burned a morning every week stitching it together by hand. Duct is the thing I wanted for that job, so I built it and made it MIT.

Design decisions are argued in the open. GitHub is the best place to find me.

A long sandy beach and green headlands on the Asturias coast, in the north of Spain, under a clear sky
Asturias, north of Spain.

License

MIT

Maintainer

Shirish Kadam

Made in

Spain

Open source

Read it, run it, break it.

Duct is MIT licensed, on your own keys or your ChatGPT plan. Star the repo if it is useful, open an issue if it is not.

MIT licensed · Bring your own keys · No account needed to run it yourself