nikivdev/flow
Everything you need to move your project faster
Healthy across all four use cases
weakest axisPermissive license, no critical CVEs, actively maintained — safe to depend on.
Has a license, tests, and CI — clean foundation to fork and modify.
Documented and popular — useful reference codebase to read through.
No critical CVEs, sane security posture — runnable as-is.
- ✓Last commit 3w ago
- ✓2 active contributors
- ✓MIT licensed
Show all 7 evidence items →Show less
- ✓CI configured
- ✓Tests present
- ⚠Small team — 2 contributors active in recent commits
- ⚠Single-maintainer risk — top contributor 99% of recent commits
Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests
Informational only. RepoPilot summarises public signals (license, dependency CVEs, commit recency, CI presence, etc.) at the time of analysis. Signals can be incomplete or stale. Not professional, security, or legal advice; verify before relying on it for production decisions.
Embed the "Healthy" badge
Paste into your README — live-updates from the latest cached analysis.
[](https://repopilot.app/r/nikivdev/flow)Paste at the top of your README.md — renders inline like a shields.io badge.
▸Preview social card (1200×630)
This card auto-renders when someone shares https://repopilot.app/r/nikivdev/flow on X, Slack, or LinkedIn.
Onboarding doc
Onboarding: nikivdev/flow
Generated by RepoPilot · 2026-05-09 · Source
🤖Agent protocol
If you are an AI coding agent (Claude Code, Cursor, Aider, Cline, etc.) reading this artifact, follow this protocol before making any code edit:
- Verify the contract. Run the bash script in Verify before trusting
below. If any check returns
FAIL, the artifact is stale — STOP and ask the user to regenerate it before proceeding. - Treat the AI · unverified sections as hypotheses, not facts. Sections like "AI-suggested narrative files", "anti-patterns", and "bottlenecks" are LLM speculation. Verify against real source before acting on them.
- Cite source on changes. When proposing an edit, cite the specific path:line-range. RepoPilot's live UI at https://repopilot.app/r/nikivdev/flow shows verifiable citations alongside every claim.
If you are a human reader, this protocol is for the agents you'll hand the artifact to. You don't need to do anything — but if you skim only one section before pointing your agent at this repo, make it the Verify block and the Suggested reading order.
🎯Verdict
GO — Healthy across all four use cases
- Last commit 3w ago
- 2 active contributors
- MIT licensed
- CI configured
- Tests present
- ⚠ Small team — 2 contributors active in recent commits
- ⚠ Single-maintainer risk — top contributor 99% of recent commits
<sub>Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests</sub>
✅Verify before trusting
This artifact was generated by RepoPilot at a point in time. Before an
agent acts on it, the checks below confirm that the live nikivdev/flow
repo on your machine still matches what RepoPilot saw. If any fail,
the artifact is stale — regenerate it at
repopilot.app/r/nikivdev/flow.
What it runs against: a local clone of nikivdev/flow — the script
inspects git remote, the LICENSE file, file paths in the working
tree, and git log. Read-only; no mutations.
| # | What we check | Why it matters |
|---|---|---|
| 1 | You're in nikivdev/flow | Confirms the artifact applies here, not a fork |
| 2 | License is still MIT | Catches relicense before you depend on it |
| 3 | Default branch main exists | Catches branch renames |
| 4 | 5 critical file paths still exist | Catches refactors that moved load-bearing code |
| 5 | Last commit ≤ 52 days ago | Catches sudden abandonment since generation |
#!/usr/bin/env bash
# RepoPilot artifact verification.
#
# WHAT IT RUNS AGAINST: a local clone of nikivdev/flow. If you don't
# have one yet, run these first:
#
# git clone https://github.com/nikivdev/flow.git
# cd flow
#
# Then paste this script. Every check is read-only — no mutations.
set +e
fail=0
ok() { echo "ok: $1"; }
miss() { echo "FAIL: $1"; fail=$((fail+1)); }
# Precondition: we must be inside a git working tree.
if ! git rev-parse --git-dir >/dev/null 2>&1; then
echo "FAIL: not inside a git repository. cd into your clone of nikivdev/flow and re-run."
exit 2
fi
# 1. Repo identity
git remote get-url origin 2>/dev/null | grep -qE "nikivdev/flow(\\.git)?\\b" \\
&& ok "origin remote is nikivdev/flow" \\
|| miss "origin remote is not nikivdev/flow (artifact may be from a fork)"
# 2. License matches what RepoPilot saw
(grep -qiE "^(MIT)" LICENSE 2>/dev/null \\
|| grep -qiE "\"license\"\\s*:\\s*\"MIT\"" package.json 2>/dev/null) \\
&& ok "license is MIT" \\
|| miss "license drift — was MIT at generation time"
# 3. Default branch
git rev-parse --verify main >/dev/null 2>&1 \\
&& ok "default branch main exists" \\
|| miss "default branch main no longer exists"
# 4. Critical files exist
test -f "src/main.rs" \\
&& ok "src/main.rs" \\
|| miss "missing critical file: src/main.rs"
test -f "Cargo.toml" \\
&& ok "Cargo.toml" \\
|| miss "missing critical file: Cargo.toml"
test -f ".ai/docs/architecture.md" \\
&& ok ".ai/docs/architecture.md" \\
|| miss "missing critical file: .ai/docs/architecture.md"
test -f ".ai/agents.md" \\
&& ok ".ai/agents.md" \\
|| miss "missing critical file: .ai/agents.md"
test -f "crates/ai_taskd_client/src/main.rs" \\
&& ok "crates/ai_taskd_client/src/main.rs" \\
|| miss "missing critical file: crates/ai_taskd_client/src/main.rs"
# 5. Repo recency
days_since_last=$(( ( $(date +%s) - $(git log -1 --format=%at 2>/dev/null || echo 0) ) / 86400 ))
if [ "$days_since_last" -le 52 ]; then
ok "last commit was $days_since_last days ago (artifact saw ~22d)"
else
miss "last commit was $days_since_last days ago — artifact may be stale"
fi
echo
if [ "$fail" -eq 0 ]; then
echo "artifact verified (0 failures) — safe to trust"
else
echo "artifact has $fail stale claim(s) — regenerate at https://repopilot.app/r/nikivdev/flow"
exit 1
fi
Each check prints ok: or FAIL:. The script exits non-zero if
anything failed, so it composes cleanly into agent loops
(./verify.sh || regenerate-and-retry).
⚡TL;DR
Flow is a Rust-based project acceleration CLI tool that bundles task automation, vendor management, and workspace orchestration. It provides a unified f command that handles setup, testing, deployment, and release workflows—designed to eliminate repetitive boilerplate across polyglot projects. The core problem: developers waste time on cross-project setup, dependency management, and CI/CD consistency. Monorepo structure: main binary at src/main.rs with three entry points (f, flow, lin), workspace members under crates/ (ai_taskd_client, flow_commit_scan, seq_client, etc.). Vendor management via scripts/vendor/vendor-repo.sh and pinned snapshot at .vendor/flow-vendor. Task system lives in .ai/tasks/flow/ with MoonBit definitions. Agent/AI automation docs in .ai/ (agents.md, recipes/, skills/).
👥Who it's for
Rust-heavy teams (especially those with mixed-language monorepos) who need reproducible local dev loops and automated release pipelines. Specifically: contributors to projects with vendored dependencies, workspace managers dealing with multi-crate Rust setups, and teams deploying to macOS/Linux across arm64 and x86_64.
🌱Maturity & risk
Actively maintained and production-ready. The main binary is at v0.1.3 with substantial Rust codebase (~5.1M LOC), multi-platform CI/CD (macOS/Linux arm64 + x86_64), and mature tooling integration (Tokio async, Axum web, shell scripting). Version number suggests it's past MVP but pre-1.0; README explicitly covers installation via released binaries and upgrade paths.
Low to moderate risk for production use: single maintainer (nikivdev) visible in repo ownership, but ecosystem is healthy (vendored dependencies in flow-vendor, public vendor snapshot pinning via vendor.lock.toml). No obvious breaking-change history in provided file list. Risk increases if relying on undocumented internal APIs in .ai/ agent tasks—these appear experimental (MoonBit task definitions, agent orchestration in agents.md).
Active areas of work
Active development on task automation and AI integration: .ai/tasks/flow/ contains recent MoonBit task definitions (bench-cli, dev-check, pr-ready, regression-smoke, release-preflight). Release registry work visible in .ai/recipes/project/ (release-flow-registry.md, release-seq-registry.md). Health-checks and documentation sync in .ai/health-checks.json and .ai/docs/.last_sync suggest continuous integration updates.
🚀Get running
git clone https://github.com/nikivdev/flow.git
cd flow
./scripts/vendor/vendor-repo.sh hydrate
FLOW_PROFILE=release ./scripts/deploy.sh
~/bin/f --version
For a faster dev loop without optimization: ./scripts/vendor/vendor-repo.sh hydrate && ./scripts/deploy.sh (installs to ~/bin/f).
Daily commands:
f setup # Check workspace and toolchain
f test # Run test suite
f deploy # Build and install to ~/bin
f tasks list # Inspect available tasks
f --help # See full CLI surface
For canary builds: f upgrade --canary. For development: typical Rust workflow cargo build --release in root or specific crates/ member.
🗺️Map of the codebase
src/main.rs— Primary entry point for theflowCLI tool—every contributor must understand the command structure and how tasks are dispatched.Cargo.toml— Workspace root configuration defining all crates, binaries, and core dependencies (axum, tokio, clap); essential for understanding build and dependency management..ai/docs/architecture.md— High-level architectural documentation explaining how Flow integrates AI tasks, agents, and the project structure..ai/agents.md— Agent definitions and configuration—critical for understanding Flow's AI-driven automation model.crates/ai_taskd_client/src/main.rs— AI task daemon client implementation; core bridge between CLI and async task execution..goreleaser.yaml— Release and binary distribution pipeline; contributors must follow this for version bumps and multi-platform builds..github/workflows/release.yml— Automated release workflow orchestrating builds, checksums, and GitHub releases—essential for deployment cadence.
🛠️How to make changes
Add a new CLI command
- Create a new subcommand module in src/ or src/commands/ following clap derive macro conventions (
src/main.rs) - Define the command struct with #[derive(Parser)] and implement the command handler (
src/main.rs) - Wire the command into the main dispatcher by adding it to the top-level enum (
src/main.rs) - Add tests to the command module and update docs/commands.md (
.ai/docs/commands.md)
Add a new AI task or agent
- Create a new directory under .ai/tasks/flow/ or .ai/recipes/project/ with a descriptive name (
.ai/tasks/flow) - Define the task in Moon language (main.mbt) with inputs, outputs, and execution logic (
.ai/tasks/flow/noop/main.mbt) - Create moon.mod.json and moon.pkg.json manifest files for package metadata (
.ai/tasks/flow/noop/moon.mod.json) - Register the task in .ai/agents.md or .ai/repos.toml for scheduling and discovery (
.ai/agents.md)
Add a new integration crate
- Create a new directory in crates/ with Cargo.toml and src/lib.rs (
crates/seq_client/Cargo.toml) - Add the crate to the workspace members array in the root Cargo.toml (
Cargo.toml) - Implement the integration logic in src/lib.rs, exporting public API surface (
crates/seq_client/src/lib.rs) - Import and use the crate in ai_taskd_client or main.rs where needed (
crates/ai_taskd_client/src/main.rs)
Add a new GitHub Actions workflow
- Create a new YAML file in .github/workflows/ following existing patterns (e.g., pr-fast.yml or release.yml) (
.github/workflows/release.yml) - Define triggers (on: [push, pull_request, workflow_dispatch]) and job matrix if needed (
.github/workflows/pr-fast.yml) - Use existing secrets (FLOW_GITHUB_TOKEN, etc.) and reuse step templates from other workflows (
.github/workflows/release.yml) - Document the workflow purpose in .ai/docs/ and link from agents.md if it's AI-driven (
.ai/docs/changelog.md)
🔧Why these technologies
- Axum + Tokio — Async HTTP server foundation for task daemon and future API endpoints; Tokio provides efficient concurrency for multi-task scheduling
- Clap (derive macros) — Type-safe, ergonomic CLI argument parsing with built-in help generation and bash completions
- Moon (MoonBit language) — High-level task definition DSL enabling declarative, reproducible AI task specifications with build-time safety
- Flox + Nix — Reproducible development environment and dependency pinning across macOS/Linux; decouples project from system Rust/toolchain versions
- GoReleaser — Multi-platform binary compilation, checksumming, and GitHub release automation with minimal configuration
- Seq (event logging) — Structured logging and observability for task execution, agent decisions, and audit trails
⚖️Trade-offs already made
-
Monorepo with multiple crates over separate repos
- Why: Simplified dependency management, atomic versioning, and cross-crate refactoring; Flow itself is the canonical example of the tool it builds
- Consequence: Higher cognitive load on single workspace; requires careful API boundaries and CHANGELOG discipline
-
Moon tasks in a .ai/ directory rather than inline in CLI
- Why: Separates data/definition from executable code; enables AI agents to introspect, validate, and compose tasks without Rust recompilation
- Consequence: Extra layer of indirection; developers must understand both Rust CLI and Moon task DSL
-
Multi-binary entry points (f, flow, lin, flow-workspace-bootstrap) from same source
- Why: Alias convenience; different UX targets (users, CI/CD, developers) can use familiar names
- Consequence: Potential confusion about feature parity; requires careful binary-specific behavior isolation
-
Checksum verification on install/upgrade (opt-out with env var)
- Why: Defense against supply-chain tampering; aligns with package manager best practices
- Consequence: Adds ~10–50ms to installation; requires SHA-256 inclusion in releases; legacy releases must be explicitly marked insecure
🚫Non-goals (don't propose these)
- Does not replace existing build systems (Cargo, npm, etc.); composes with them
- Not a monorepo tool in the Bazel/Nx sense; simpler task-runner model
- Does not provide persistent multi-tenant CI/CD platform; focuses on local + GitHub Actions workflows
- Not a replacement for general-purpose scripting languages; Moon tasks are domain-specific for Flow metadata
- Linux support is secondary to macOS; binary distribution focuses on Darwin first
🪤Traps & gotchas
- Vendor hydration is mandatory:
./scripts/vendor/vendor-repo.sh hydratemust run before build, or dependency resolution fails silently. 2. FLOW_PROFILE=release is optional but recommended: release builds are optimized; omitting it creates debug binaries (~10x slower). 3. Shell environment matters: installer and scripts rely on PATH setup; newly installed shells may not findfimmediately (documented in README but easy to miss). 4. GitHub API rate limits:f upgraderespects FLOW_GITHUB_TOKEN / GITHUB_TOKEN / GH_TOKEN env vars; anonymous upgrades will hit 60 req/hr limit. 5. Checksum verification enabled by default: SHA-256 validation for releases; very old tags lackchecksums.txt(workaround:FLOW_UPGRADE_INSECURE=1). 6. .ai/ task definitions use MoonBit: non-standard language; requires MoonBit toolchain if modifying tasks (not mentioned in setup docs).
🏗️Architecture
💡Concepts to learn
- Workspace Resolver 2 — Flow uses Cargo resolver 2 in polyglot monorepo; determines how Rust dependencies resolve across multiple crates and vendored packages
- Vendor Snapshot Pinning — Flow's vendor.lock.toml model ensures reproducible builds by pinning exact commits of external repos (flow-vendor); critical for offline/air-gapped builds
- Tokio Async Runtime — Powers Flow's task concurrency, HTTP server (Axum), and background file watching; understanding work-stealing schedulers is essential for debugging hangs or high CPU
- TUI (Terminal User Interface) with Ratatui — Flow uses Ratatui + Crossterm for interactive CLI widgets (task lists, health checks); relevant for enhancing or debugging terminal output
- Cryptographic Verification (SHA2, HMAC, X25519) — Release binary verification, secure agent communication, and credential handling rely on these primitives; Flow's security model depends on correct implementation
- File System Events and Debouncing — Flow uses
notify+notify-debouncer-minifor watch-based task triggering; debouncing prevents task storms during rapid file changes - MessagePack Serialization — Flow uses rmp-serde for compact binary serialization (e.g., agent communication, task state); more efficient than JSON for internal protocols
🔗Related repos
nikivdev/flow-vendor— The pinned public vendor snapshot repo; vendored dependencies materialize from this repo's commits specified in vendor.lock.tomlrust-lang/cargo— Flow's dependency/workspace model builds on Cargo; understanding Cargo workspace resolution (resolver 2) is prerequisitemoonbitlang/core— Flow uses MoonBit for task definitions in .ai/tasks/; MoonBit ecosystem reference for writing custom taskstokio-rs/tokio— Tokio powers Flow's async runtime; deep understanding of Tokio helps optimize Flow's task scheduler and HTTP serverratatui-org/ratatui— TUI framework Flow uses for interactive CLI; relevant if building new terminal-based Flow commands (e.g., task monitor)
🪄PR ideas
To work on one of these in Claude Code or Cursor, paste:
Implement the "<title>" PR idea from CLAUDE.md, working through the checklist as the task list.
Add comprehensive unit tests for crates/flow_commit_scan
The flow_commit_scan crate is a core workspace member but has no visible test files in the structure. Given that flow is a project acceleration tool heavily dependent on commit scanning for features like regression detection and release validation, this crate needs robust test coverage. This would catch edge cases in git history parsing and improve reliability of the commit-dependent workflows shown in .ai/tasks/flow/.
- [ ] Create tests/lib.rs in crates/flow_commit_scan/ with unit tests for core scanning logic
- [ ] Add integration tests for parsing various git commit formats and edge cases
- [ ] Ensure tests cover the commit scanning used by regression-smoke and release-preflight tasks
- [ ] Run tests locally with 'cargo test -p flow_commit_scan' and add to CI
Implement health check validation tests for .ai/health-checks.json
The repo contains a health-checks.json file (visible in file structure) but there's no apparent test suite validating these checks. Given the project's focus on project acceleration and the presence of dev-check and pr-ready tasks in .ai/tasks/, adding automated validation of health checks would ensure the project's own developer experience remains solid and prevent silent failures.
- [ ] Parse and document the schema of .ai/health-checks.json
- [ ] Create src/tests/health_checks.rs to validate each health check can be executed
- [ ] Add assertions for expected outputs from checks referenced in dev-check/main.mbt and pr-ready/main.mbt tasks
- [ ] Integrate test execution into .github/workflows/pr-fast.yml
Add CLI integration tests for cross-platform installer and upgrade paths
The README documents curl-based installation and f upgrade --canary/--stable flows, but there are no visible integration tests validating these critical user paths work across platforms. The .goreleaser.yaml and installer-smoke-sh.md recipe exist, yet no automated tests verify the install.sh script's behavior, checksum verification, or upgrade logic with environment variables (FLOW_UPGRADE_REPO, FLOW_GITHUB_TOKEN).
- [ ] Create tests/installer_integration.rs to mock GitHub releases and validate install.sh behavior
- [ ] Test upgrade logic with FLOW_UPGRADE_REPO and token fallback chains (FLOW_GITHUB_TOKEN → GITHUB_TOKEN → GH_TOKEN)
- [ ] Add test cases for checksum verification bypasses and legacy release handling mentioned in README
- [ ] Add test workflow in .github/workflows/ to run on macOS and Linux for each release candidate
🌿Good first issues
- Add integration tests for
scripts/vendor/vendor-repo.shin different network/disk states (hydrate with cache, hydrate fresh clone, dehydrate). Currently no visible test coverage in file list. - Document the MoonBit task system in
docs/with a 'Writing Custom Tasks' guide..ai/tasks/flow/examples exist but are not explained; new contributors can't create tasks. - Add
f doctorchecks for vendor snapshot freshness (comparevendor.lock.tomlpinned commit against.vendor/flow-vendorHEAD) and warn if outdated. Health-checks.json exists but doctor command logic is not visible.
⭐Top contributors
Click to expand
Top contributors
- @nikivdev — 99 commits
- [@Nikita Voloboev](https://github.com/Nikita Voloboev) — 1 commits
📝Recent commits
Click to expand
Recent commits
a747e74— Keep seq deploy tasks in seq repo (nikivdev)74cb653— Add seq release deploy tasks (nikivdev)33e2af3— Add external CLI and push policy workflows (nikivdev)4fbaa5d— Deduplicate JJ sync bypass handling (nikivdev)386ad32— Harden sync repair flow and split sync remotes (nikivdev)71d4c26— Install staged local Zed builds (nikivdev)739826c— Avoid misleading JJ repair hints during sync (nikivdev)9d46fbe— Improve session tooling and repo bootstrap flows (nikivdev)44f609d— Prefer two-segment Codex session ids (nikivdev)8ff4e06— Disambiguate compact Codex session ids (nikivdev)
🔒Security observations
- High · Hardcoded API Keys in Environment Template —
.env.example. The .env.example file contains examples of API keys (OPENAI_API_KEY, ANTHROPIC_API_KEY, GROQ_API_KEY) that follow the pattern of real credentials. While this is a template file, developers may inadvertently commit actual keys, and the file structure suggests API key management is a core feature. Fix: Ensure .env and similar config files are in .gitignore. Use a secrets management system (e.g., HashiCorp Vault, AWS Secrets Manager) for production. Document best practices for API key management in contribution guidelines. - High · Insecure Installation Script —
README.md and install.sh endpoint. The installer uses curl piping to sh (curl -fsSL https://myflow.sh/install.sh | sh), which is a well-known security anti-pattern. Compromised website or MITM attacks could execute arbitrary code. While SHA-256 verification is mentioned for releases, the initial script download itself is not signed. Fix: Implement signed installation scripts with GPG verification. Download the script first, verify the signature, then execute. Provide checksums for the installer itself. Consider using a package manager (Homebrew, apt, etc.) as the primary distribution method. - High · Potential SQL Injection via rusqlite —
Cargo.toml (rusqlite dependency), likely in crates/flow_commit_scan and database modules. The codebase uses rusqlite (0.39) for SQLite database operations. Without reviewing actual query construction patterns, rusqlite is vulnerable to SQL injection if queries are built with string concatenation rather than parameterized queries. Fix: Audit all database queries to ensure parameterized queries are used exclusively. Never concatenate user input into SQL strings. Use rusqlite's prepared statements with binding parameters. - Medium · Outdated Edition Specification —
Cargo.toml (line: edition = '2024'). The Cargo.toml specifies edition = '2024' which is not a valid Rust edition (only 2015, 2018, 2021 are valid). This suggests the file may be misconfigured or from a future/invalid state, potentially causing build issues or unexpected behavior. Fix: Update to a valid Rust edition. Use 'edition = "2021"' for modern Rust projects, or '2018' for compatibility with older codebases. - Medium · Incomplete Dependency Declaration —
Cargo.toml (last dependency line). The seq_everruns_b dependency in Cargo.toml is truncated/incomplete, missing version specification and features. This could cause build failures or unexpected behavior. Fix: Complete the dependency declaration with proper version and features, e.g., 'seq_everruns_bridge = { path = "crates/seq_everruns_bridge" }'. - Medium · Cryptographic Implementation Risk —
Cargo.toml (crypto_secretbox, x25519-dalek dependencies). The project uses crypto_secretbox (0.1) and x25519-dalek for encryption. Version 0.1 of crypto_secretbox is very old and may have security issues. Additionally, custom cryptography handling increases risk of implementation errors. Fix: Upgrade crypto_secretbox to the latest version. Consider using well-tested libraries like 'ring' or 'sodiumoxide'. Conduct security review of all cryptographic operations. Avoid implementing custom crypto protocols. - Medium · GitHub Token Exposure Risk —
README.md (Upgrade section). The README mentions FLOW_GITHUB_TOKEN and GITHUB_TOKEN environment variables for upgrade operations. These tokens could be exposed in shell history, process listings, or logs if not handled carefully. Fix: Document secure token storage practices. Use keyring/credential store rather than environment variables where possible. Implement token rotation. Warn users about shell history exposure. Use short-lived tokens with minimal scopes. - Medium · Missing Security Headers in Axum Web Server — ``. The project uses Axum web framework with tower-http CORS middleware but default configuration may not include critical security headers (X-Frame-Options, X-Content-Type-Options, Strict-Transport-Security, CSP). Fix: undefined
LLM-derived; treat as a starting point, not a security audit.
👉Where to read next
- Open issues — current backlog
- Recent PRs — what's actively shipping
- Source on GitHub
Generated by RepoPilot. Verdict based on maintenance signals — see the live page for receipts. Re-run on a new commit to refresh.