Contact
READING PROGRESS:0%
Personal Project · 2026

Eliminating the junk drawer of notes apps with background agent filing

SwiftUISwiftDataApple Speech FrameworkPythonlaunchdTrello APIObsidian

Outcome

Shipped an iOS and macOS tool that turns quick voice dumps into structured Trello cards and Obsidian notes without human sorting queues.

  • Sub-2-second capture from lock screen
  • Local-first on-device transcription
  • Automated sorting into Trello and Obsidian

I was out walking the dog on a windy evening, juggling a leash in one hand and thinking about three unrelated problems at once: an idea for an essay on keychain permissions, a reminder to follow up on a 200-amp electrical panel permit, and the kickoff time for my son’s soccer game on Saturday.

I pulled out my phone to write it down.

First came the friction: which app do I open? If I open Apple Notes, it joins a graveyard of three hundred unlabeled voice memos and half-typed sentences. If I open Obsidian, I’m tapping tiny markdown tags on a glass screen while the dog pulls on the leash. If I wait until I get home to sit at a desk, the thought is gone.

That hesitation is what kills capture. Every note-taking app on the market solves the first two seconds—the easy part—and leaves you with hours of sorting debt on the weekend.

I wanted a capture tool with zero decisions at the door: push a button, speak for ten seconds in plain English, put the phone away, and let a background script figure out where the pieces belong.

Try out the live classification and routing demo below:


Why the Architecture Matters

Most modern productivity tools try to be a giant cloud bucket where your notes, tasks, calendar, and team chats live in one proprietary silo. That approach fails because different types of thoughts need different tools:

  • Tasks belong on an actionable Kanban board (like Trello) where they can be prioritized and checked off.
  • Durable Ideas belong in a local, future-proof markdown knowledge vault (like Obsidian).
  • Logistics belong on a shared family calendar.

Inlet solves this by separating instant capture from judgment and routing:

1. Two-Stage Processing Pipeline

  • Stage A (On-Device, < 200ms): Apple’s native Speech framework transcribes audio locally on your iPhone. A lightweight on-device model confirms capture safety on the lock screen so you know the audio landed, without waiting on cloud round-trips.
  • Stage B (Background Routing Daemon): A lightweight macOS launchd background job runs every few minutes. It evaluates new transcripts, splits compound sentences into distinct outcomes (e.g. splitting an electrical task from an essay concept), and routes each item directly to its destination.

2. Autonomy Boundaries and Safety Gates

  • Low Risk (Auto-Execute): Filing an idea note into an Obsidian folder or placing a solo task in a personal backlog happens automatically.
  • High Risk (Attended Gate): Anything that touches external people—calendar invites with attendees, messages to contractors, or public web mutations—requires explicit human approval before sending.

3. Complete Reversibility

Every action executed by the background script is logged in a local SQLite ledger with a 7-day rollback history. If a task is misrouted, correcting it takes three seconds: you simply drag it to the right lane, and the correction refines the routing logic for next time.


Honest Caveats

  • Compound Speech Edge Cases: If you dictate a rapid stream of consciousness with three overlapping thoughts and unclear pronouns, the background parsing script will occasionally lump two ideas together. An undo mechanism and clean ledger are non-negotiable.
  • Platform Coupling: The initial capture client relies on native iOS and macOS frameworks (SwiftUI, CloudKit, launchd). It is built for reliable daily personal use across Apple hardware, not as a cross-platform web app.

Open Source Repository

The complete system architecture, background daemon scripts, and outcome schemas are available on GitHub:

LIVE DOM RIG
Inlet · Quick CaptureSTAGE A & B RUNTIME
RECORDING: IDLE
PRESETS:
STAGE B OUTCOMESAwaiting input
Dump a thought on the left to trigger Stage A on-device parsing and Stage B autonomous routing.
REVERSIBLE LOG: 7 DAYSZERO PII RETENTION

STAY IN THE LOOP