Skip to content
A System Build.PRODUCTION (V2)

Idea Inbox.Capture, decomposed.

A four-stage automated pipeline that watches a Discord channel for shared Instagram links, decomposes each video into typed, queryable knowledge atoms, and files them into a structured corpus consumable by downstream agents. Share a reel. Walk away. The pipeline does the rest.

What This Demonstrates.

Pattern recognition and abstraction. Capture is separated from judgment by design. Relevance is a downstream query, not an extraction-time decision. The corpus compounds instead of going stale.

Pipeline · One Manual Action
  1. Ingest
    Catch the shared link
  2. Extract
    Audio + visuals, in parallel
  3. Atomize
    Decompose into typed atoms
  4. Notify
    Proposals land, human curates
Overview.

What Idea Inbox Is.

Agentic AI tooling moves faster than anyone can track by reading. Demos of new patterns, prompts, and workflows scroll by on Instagram constantly and disappear. Most "save it for later" tools fail because captured content is never structured and never resurfaces. Idea Inbox turns that ephemeral feed into a permanent, typed, queryable corpus with one manual step: share a reel to a Discord channel.

Everything after that is automated. The pipeline downloads the video, transcribes the audio, extracts visuals, and decomposes the content into discrete knowledge atoms. Each atom is a typed markdown file with required body sections and YAML frontmatter. Atoms land in a proposal folder; a human (me) promotes the good ones into the curated tree. Agents never write directly to the curated tree.

The atoms are consumed later by the /architect Claude Code skill, which designs end-to-end agentic pipelines by querying the corpus. The corpus is the asset. Idea Inbox is the production engine that fills it.

Manual steps1 (share to Discord)
Pipeline stages4 (ingest, extract, atomize, notify)
Atom kinds12 (typed taxonomy)
Domain tags18
Architectural generations3 (v2 active, v0 and v1 archived)
Curation gateHuman promotion into the curated tree
Pipeline.

Four Stages. One Manual Action.

01

Ingest

The pipeline catches a shared link.

The trigger is not a daemon. There is no always-on listener process. Instead, a long-lived Claude Code session connected to Discord acts as the listener. When a reel URL appears in the watched channel, the session fires the pipeline. Eliminating the dedicated listener removed a whole process and its failure modes (port conflicts, restart loops, supervisor mismatches).

The downloader is yt-dlp. It supports Instagram, TikTok, YouTube, X, and more, which means the same pipeline accepts links from any of those platforms without a new integration. Downloaded videos are normalized by ffmpeg into a consistent format.

02

Extract

Audio becomes text. Visuals become structured observations.

Audio is transcribed by whisper-cpp. The model is ggml-base.en.bin, auto-downloaded on first run. Whisper-cpp runs locally on the Mac Mini, so transcription is free at the margin.

Visuals are extracted by ffmpeg as frames at regular intervals, then handed to Claude Opus with vision via claude -p --effort max. The vision call produces a structured description of what is visible: UI elements, code on screens, slide content, hands demonstrating workflows.

The two extractions run in parallel. By the time the audio transcript is ready, the visual observations are too.

03

Atomize

The content gets decomposed into typed knowledge.

Claude Opus with extended thinking (--effort high) reads the combined transcript and visual observations and decomposes them into discrete knowledge atoms. Each atom is one of twelve typed kinds: pattern, primitive, tool, recipe, lesson, pitfall, datapoint, llm-feature, resource, practitioner, prompt, eval.

Every atom is a typed markdown file with required body sections (depending on kind), YAML frontmatter (with required fields including a numeric confidence score), and at least one domain tag from a vocabulary of eighteen. Atoms are validated against the schema. Failures are logged. Valid atoms still ship even if the run produced some invalid ones, so a single bad atom does not sink the whole video.

A typical reel produces between 0 and roughly 15 atoms. Empty results are accepted. The pipeline does not invent atoms to hit a quota.

04

Notify

The proposals land. The human curates.

Atoms land in data/brain/_proposals/. They are not yet part of the curated corpus. I review them in Obsidian, decide which deserve promotion into the live tree, and move the survivors into their typed folders. Agents never write directly into the curated corpus. The human is the curation gate.

After atoms are filed, the pipeline posts a notification to a separate Discord channel summarizing what was produced. The notification is the closing handoff. The pipeline is done.

Evolution.

Three Generations.

The current pipeline is generation two. The previous generations got archived but not deleted. Their failure modes informed the design that replaced them.

Generation zero (retired 2026-05-01) was a standalone listener process. A dedicated launchd plist watched Discord and fired the pipeline. It worked, but the listener was a brittle piece of infrastructure on its own. The fix was the realization that a long-lived Claude Code session, already connected to Discord for other reasons, could do the listening for free. Generation zero got deleted; the listener role got folded into existing infrastructure.

Generation one (retired 2026-05-03) was the "panel" pipeline. Each video got scored at extraction time by a five-persona evaluation panel (builder, operator, skeptic, futurist, pattern matcher). The panel produced a per-video verdict on whether the content was useful, rendered a PDF, and posted the PDF back to Discord. That whole generation is archived under _deprecated_panel_2026-05-03/. It failed because the panel verdict was a single-use output. Even if the panel decided a video was useful, the verdict did not compound. The next time I needed knowledge from that video, the verdict could not help me find it.

Generation two (current) abandoned per-video verdicts entirely. Instead of asking "is this one video useful to FORGE?" it asks "what does this video know?" and decomposes the answer into typed, queryable atoms. Capture is now separated from judgment by design. Relevance is a downstream query, not an extraction-time decision. The corpus compounds. That iteration is the moral of the system.

Stack.

The Pieces.

Trigger
Active Claude Code session connected to Discord (no dedicated listener daemon)
Download
yt-dlp (Instagram, TikTok, YouTube, X)
Normalize
ffmpeg (video format normalization, frame extraction)
Transcribe
whisper-cpp with ggml-base.en.bin (local, free at the margin)
Vision Extract
Claude Opus 4.7 with vision via claude -p --effort max
Atomize
Claude Opus 4.7 with extended thinking via claude -p --effort high
Notify
Discord REST API v10
Storage
Markdown files with YAML frontmatter
Curation Surface
Obsidian vault
Patterns.

The Judgment Calls.

01

Capture is separated from judgment.

The pipeline extracts knowledge unconditionally. It does not decide whether the content is useful. That decision is deferred to whoever queries the corpus later. This is the architectural insight that makes the system compounding rather than disposable. A relevance judgment made at capture time is consumed once. An atom is a reusable unit of knowledge that any future query can retrieve.

02

Typed atoms, not free-form notes.

Twelve atom kinds. Eighteen domain tags. Required body sections per kind. Required frontmatter fields. The typing system is the moat. Anyone can build a pipeline that decomposes videos. The typing system is what makes the output queryable in a structured way by downstream agents.

03

Proposal-then-curate.

Atoms land in _proposals/. A human (me) promotes the good ones into the curated tree. Agents never write directly to the curated corpus. This is the gate that keeps the signal-to-noise ratio high without bottlenecking on real-time review. I can curate in batches when convenient.

04

No daemon. No always-on listener process.

The trigger is an existing Claude Code session, not a dedicated process. This eliminated a whole class of failure modes that generation zero had. The lesson generalizes: question whether each running process is actually pulling its weight, or whether its job could be folded into something that is already running.

05

Validate, but ship valid atoms even if some fail.

Every atom is validated against the schema. Invalid atoms get logged. Valid atoms still ship. One bad atom does not poison a whole video worth of good ones. The validation gate is real; the run is resilient.

Beyond Upswing.

The Pattern Travels.

Almost nothing about Idea Inbox is Upswing-specific. The four-stage pattern (ingest, extract, atomize, notify) is content-agnostic. Swap the source channel and the atom taxonomy, and the same machinery becomes a knowledge capture system for any team that watches media-rich source material.

Sales and SDR teams: feed it competitor demo videos and customer call clips. The atom taxonomy becomes objections, battle-card points, pricing signals, and prospect quotes. The corpus becomes a queryable sales-intel layer.

Product teams: feed it competitor feature launches and conference talks. The atom taxonomy becomes UX patterns, feature ideas, positioning moves, and user-research observations. The corpus feeds product strategy without anyone having to remember which video they watched.

Engineering teams: feed it library demos and conference talks. The atom taxonomy becomes patterns, pitfalls, and tool evaluations. The corpus becomes a queryable technical-decisions reference. The core insight in every case is the same: the corpus compounds; verdicts do not.

More.

There's More.

Idea Inbox is one of four AI systems I've built. The resume supplement page has the full set, including FORGE (the centerpiece) and two other deep-dives.