~/Downloads git:(main) # stop repeating yourself

flowd

Local-first, terminal-first workflow automation. flowd watches your repeated file workflows, detects the patterns, and suggests automations — you approve, dry-run, execute, and undo. From the terminal.

lang: rust license: MIT cloud: none telemetry: 0 bytes state: sqlite, yours
$ install view source ⚠ v0.2 pre-release
flowctl — zsh

how it works

A deterministic pipeline. No magic, no cloud, no surprise actions.

observe filesystem · terminal · clipboard · browser downloads normalize raw events → normalized events → workflow sessions detect repeated rename/move sequences become patterns suggest explainable suggestions — inspect the why, not just the what approve nothing runs without you # flowctl approve <id> execute dry-run first, then run — every run is tracked undo changed your mind? roll it back # flowctl undo <run_id>

features

Built on four principles: local-first, deterministic, inspectable, safe.

local-first

All data stays on your machine in a local SQLite database. No accounts, no cloud service, no separate intelligence layer required.

deterministic

The same input produces the same detected workflows. No vibes-based automation touching your files.

explainable suggestions

Every suggestion shows its reasoning. flowctl suggestions --explain tells you exactly which pattern triggered it and why.

approval-driven, with undo

Explicit approvals, dry-run execution, run tracking, and flowctl undo. Automation you can trust because you can reverse it.

inspectable state

It's just SQLite. sqlite3 flowd.db "select * from patterns;" works exactly like you'd expect.

live watch mode

Watch events, patterns, and suggestions stream in real time with flowctl watch --events.

install

v0.2 pre-release installs from source. You need a stable Rust toolchain.

# clone & install the CLI + daemon
git clone https://github.com/nickvd7/flowd && cd flowd
cargo install --path crates/flow-cli
cargo install --path crates/flow-daemon

# first-run setup — pick the folders to observe
flowctl setup --watch ~/Downloads --watch ~/Desktop

# start observing
flow-daemon

Then the core loop: observe → detect → suggest → inspect → approve → dry-run → run → undo

architecture

A Rust workspace of small, focused crates. Open-core engine; the optional intelligence layer is strictly one-way (flowd → flowd-intelligence) and never required.

flow-coreshared domain types and configuration flow-adapterslocal event capture (fs, terminal, clipboard, downloads) flow-patternsnormalization, sessions, pattern detection flow-analysisanalysis pipeline and intelligence boundary flow-dslautomation specification flow-execdry-run and execution engine flow-dbSQLite persistence and migrations flow-daemonbackground observation daemon flow-clithe flowctl command-line interface

contact

Questions, feedback, or want to get involved? Open a line — no daemon required.

or plain old email: [click to reveal]