{"id":51002162,"url":"https://github.com/fru-dev3/prevail-cli","last_synced_at":"2026-06-20T15:33:24.708Z","repository":{"id":361829139,"uuid":"1255448570","full_name":"fru-dev3/prevail-cli","owner":"fru-dev3","description":"prevAIl — a terminal cockpit for your life. Fan high-stakes questions out to Claude + Codex + Gemini in parallel and let the council vote. Self-contained Bun + OpenTUI binary; bring-your-own CLI.","archived":false,"fork":false,"pushed_at":"2026-06-20T00:05:25.000Z","size":4948,"stargazers_count":9,"open_issues_count":4,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-06-20T02:08:10.759Z","etag":null,"topics":["ai-council","bun","claude-code","codex","gemini-cli","multi-model","opentui","personal-cockpit","terminal-ui"],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fru-dev3.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-31T20:55:00.000Z","updated_at":"2026-06-20T00:05:30.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/fru-dev3/prevail-cli","commit_stats":null,"previous_names":["fru-dev3/aireadyu","fru-dev3/prevail","fru-dev3/prevail-cli"],"tags_count":36,"template":false,"template_full_name":null,"purl":"pkg:github/fru-dev3/prevail-cli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fru-dev3%2Fprevail-cli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fru-dev3%2Fprevail-cli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fru-dev3%2Fprevail-cli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fru-dev3%2Fprevail-cli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fru-dev3","download_url":"https://codeload.github.com/fru-dev3/prevail-cli/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fru-dev3%2Fprevail-cli/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34576043,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-20T02:00:06.407Z","response_time":98,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-council","bun","claude-code","codex","gemini-cli","multi-model","opentui","personal-cockpit","terminal-ui"],"created_at":"2026-06-20T15:33:24.642Z","updated_at":"2026-06-20T15:33:24.696Z","avatar_url":"https://github.com/fru-dev3.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./assets/logo.svg\" alt=\"prevAIl\" width=\"560\"/\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cb\u003eA terminal cockpit for the rest of your life.\u003c/b\u003e\u003cbr/\u003e\n  Ask Claude, Codex, Antigravity (Google's `agy`), and your local Ollama the same question in parallel. Let the council vote.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/fru-dev3/prevail-cli/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/v/release/fru-dev3/prevail-cli?color=C4A35A\u0026label=release\" alt=\"release\"/\u003e\u003c/a\u003e\n  \u003ca href=\"#install\"\u003e\u003cimg src=\"https://img.shields.io/badge/install-curl%20%7C%20bash-3CD8FF\" alt=\"install\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://bun.sh\"\u003e\u003cimg src=\"https://img.shields.io/badge/runtime-bun%20single%20binary-C4A35A\" alt=\"bun\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://opentui.com\"\u003e\u003cimg src=\"https://img.shields.io/badge/tui-OpenTUI-3CD8FF\" alt=\"OpenTUI\"/\u003e\u003c/a\u003e\n  \u003ca href=\"./LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-GPL--3.0-C4A35A\" alt=\"GPL-3.0\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./assets/demo.gif\" alt=\"prevAIl cockpit — 20+ life domains, council × framework × lens × web × save × serendipity × auto\" width=\"900\"/\u003e\n  \u003cbr/\u003e\n  \u003csub\u003e\u003cb\u003eThe cockpit at a glance.\u003c/b\u003e 20+ life domains in the sidebar. The active workspace on the right (here: chief). A single ConfigBar at the bottom carries every per-turn dial — \u003cb\u003eCouncil\u003c/b\u003e · \u003cb\u003eFramework\u003c/b\u003e · \u003cb\u003eLens\u003c/b\u003e · \u003cb\u003eWeb\u003c/b\u003e · \u003cb\u003eSave\u003c/b\u003e · \u003cb\u003eSerendipity\u003c/b\u003e · \u003cb\u003eAuto\u003c/b\u003e — each clickable.\u003c/sub\u003e\n\u003c/p\u003e\n\n---\n\n**One question. Four engines. One verdict.** Every part of your life — wealth, health, tax, career — is a folder of markdown. Open one, ask, and prevAIl fans the question out to every CLI you already have logged in. A chair model reads all four replies and writes one decisive answer, with a dedicated panel surfacing the *disagreement* — which is the point. Works from your terminal or your phone (Telegram bridge). Single 95 MB binary. No daemon, no Docker, no API keys.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./assets/deliberation.gif\" alt=\"prevAIl — navigate to a domain, switch tabs, see the deliberation chips\" width=\"900\"/\u003e\n  \u003cbr/\u003e\n  \u003csub\u003e\u003cb\u003ePer-domain workspaces.\u003c/b\u003e Each domain has its own \u003ccode\u003echat / state / quick start / prompts / skills\u003c/code\u003e tabs. Frameworks (BLUF, SCQA, …) and lenses (FIRST PRINCIPLES, CONTRARIAN, MOM, DAD, …) override per-domain — what you set on \u003ccode\u003ewealth\u003c/code\u003e stays on \u003ccode\u003ewealth\u003c/code\u003e.\u003c/sub\u003e\n\u003c/p\u003e\n\n```\n┌─ wealth ─────────────────────────────────────────────────────── prevAIl ─┐\n│ [chat] · state · quick start · prompts · skills      ● Council ON  ◇ cfg │\n├──────────────────────────────────────────────────────────────────────────┤\n│ › /council should I prepay the mortgage or invest the cash?              │\n│                                                                          │\n│   ◆ convening · claude · codex · gemini · ollama                         │\n│                                                                          │\n│   ◇ Claude    At your tax rate the effective mortgage cost is ~4.1%.    │\n│              A diversified index has cleared 7% long-run. Math: invest. │\n│   ◇ Codex     Spread = (after-tax return − rate) × principal × years.  │\n│              Positive → invest. Keep 6 months liquidity floor.          │\n│   ◇ Antigravity Behavioral: a guaranteed return on a known liability vs. │\n│              a probabilistic one. Pick the path you'll actually hold.   │\n│   ◇ Ollama    Local-only check: same conclusion as the cloud panel.    │\n│                                                                          │\n│  ┌─ ▸ Where panelists disagreed ──────────────────────────────────┐    │\n│  │ Liquidity floor: Codex says 6mo, Antigravity says 12mo (risk-off).  │    │\n│  └────────────────────────────────────────────────────────────────┘    │\n│                                                                          │\n│  ┌─ ◆ Verdict · synthesized by Claude ────────────────────────────┐    │\n│  │ Invest IF (a) ≥6mo liquidity, (b) you'll hold through −30%,    │    │\n│  │ (c) spread \u003e 2%. Else prepay. Liquidity is the binding test.   │    │\n│  └────────────────────────────────────────────────────────────────┘    │\n│                                                                          │\n│  ready · 4 calls · 3k↑ 1.4k↓ · ~$0.03         ◆ Framework: BLUF  ● ON  │\n└──────────────────────────────────────────────────────────────────────────┘\n```\n\n## Install\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/fru-dev3/prevail-cli/main/scripts/install.sh | bash\nprevail\n```\n\nFirst launch runs a 30-second wizard. Pick the bundled demo vault (synthetic, safe to explore) or point at your own folder. macOS + Linux. Windows via WSL.\n\n## Why prevAIl\n\n| | |\n|---|---|\n| **◆ Council, not a single voice** | Four models in parallel, one chair synthesizes. Disagreement gets its own panel — that's where the value is. |\n| **◇ Domain = folder** | `wealth/`, `health/`, `tax/`. Plain markdown. Edit anywhere. Sync with git, iCloud, Tailscale. No database. |\n| **● Uses CLIs you already pay for** | Spawns `claude`, `codex`, `gemini` — inherits every login, MCP server, and skill. No API keys to manage. |\n| **◇ Local-private when it matters** | Ollama auto-detected at `localhost:11434`. Run health or wealth on a local-only council. |\n| **▸ Off-the-keyboard** | `prevail daemon --telegram` exposes the cockpit on your phone. Same engines, same council. Chat-ID allowlist enforced. |\n| **◆ Scheduled briefings** | `prevail briefing add --cron \"0 7 * * *\" --domain wealth --prompt \"what's new this week?\"`. Verdict lands on your phone at 7am. |\n| **◇ Self-curating vault** | Every chat writes a one-line summary to `\u003cdomain\u003e/_log/YYYY-MM-DD.md`. The vault writes its own decision log. |\n| **● Hardened by default** | Vault-shell off by default, env-scrubbed subprocess, file-locked schedules, OAuth refresh tokens chmod 0600. [Audit notes →](./CHANGELOG.md#security--adversarial-sweep) |\n\n## The cockpit at a glance\n\n```\n┌─ prevAIl ─────────────────────────────────────────────────────────────────┐\n│  domains            │  [chat] · state · quick start · prompts · skills    │\n│  ───────────────    │  ───────────────────────────────────────────────    │\n│  ▸ wealth      ●    │                                                     │\n│    health      ·    │   council  ● ON       framework  ◆ BLUF             │\n│    tax         ·    │   vault    ▸ open     ◇ configure                   │\n│    career      ·    │                                                     │\n│    chief       ·    │  ─ chat ──────────────────────────────────────────  │\n│    vision      ·    │   you › what's new in tax this quarter?             │\n│                     │   ai  › Three deltas worth pulling forward …       │\n│  apps  [s]          │                                                     │\n│  ───────────────    │   ▸ tools     ◆ Council ON     ◇ configure         │\n│    1password   ✓    │                                                     │\n│    plaid       ✓    │                                                     │\n│    youtube     !    │  claude ✓   codex ✓   gemini ·   ollama ✓          │\n└─────────────────────┴─────────────────────────────────────────────────────┘\n```\n\n- **Sidebar** lists every domain and every connected app. `↑ ↓` to navigate, `s` to swap focus between the two lists.\n- **Tab strip** is consistent everywhere: `chat` is the default landing, `state` shows the live vault snapshot, `quick start` / `prompts` are editable markdown, `skills` toggles which skills the chair can call.\n- **Council** is a single toggle on the right. `● ON` fans every question to every available CLI; `◆ OFF` uses just the active one.\n- **Framework** cycles through BLUF · WIN · SCQA · SBAR · OODA · pros/cons · steelman. One click; the answer is rewritten in that structure.\n- **Tools panel** (`▸ tools`) exposes the MCP server snippet, Telegram setup, briefings, calibration, benchmarks, and clickable paths to the vault + config.\n\n## 30 seconds in\n\n```bash\n# Boot the cockpit\nprevail demo                    # safe synthetic vault — explore first\nprevail                         # use your own vault\n\n# Inside, type:\n/council should I sell or rent? # fans to all engines, gives one verdict\n/framework bluf                 # Bottom Line Up Front structure\n/distill                        # turn this conversation into a reusable skill\n```\n\n## On your phone\n\n```bash\nprevail telegram setup \u003cbot-token\u003e     # token from @BotFather\nprevail telegram add-user \u003cchat-id\u003e    # mandatory allowlist\nprevail daemon --telegram              # poll Telegram + tick briefings\n```\n\nNow `/council`, `/domain wealth`, `/framework bluf` — from anywhere.\n\n## Connectors\n\nEvery app declares how it authenticates: `api`, `oauth`, `browser`, `mcp`, or `manual`. Click a connector in the sidebar to see live auth status, what's missing, and **Test Connection**. The OAuth runner handles PKCE + loopback callback + token refresh:\n\n```bash\nprevail connectors list\nprevail connectors test plaid\nprevail connectors oauth youtube-analytics\n```\n\nShips with examples for each auth type: Plaid (api), LinkedIn (browser), YouTube Analytics (oauth), GitHub (http+key), Google Calendar (mcp).\n\n## Commands\n\n```\nprevail                          boot the cockpit\nprevail init                     first-run wizard\nprevail demo                     use the synthetic vault\nprevail doctor                   check vault + CLIs\nprevail council ...              council ops from the shell\nprevail briefing ...             scheduled domain briefings\nprevail telegram ...             configure the Telegram bridge\nprevail connectors ...           list / test / oauth\nprevail daemon --telegram        headless mode (bot + ticker)\n```\n\nInside the TUI: `↑ ↓` between domains, `s` swap to apps, `e` edit the active markdown tab, `q` quit. `/help` lists every slash command.\n\n## Platform\n\nprevAIl is bun-only. Currently builds for:\n\n- macOS arm64 (Apple Silicon)\n- macOS x86_64 (Intel)\n- Linux arm64\n- Linux x86_64\n- Windows via WSL only (no native Windows build — bun's Windows support is preview-quality as of bun 1.3.x; we'll add Windows binaries when bun's Windows story stabilizes)\n\nA terminal with UTF-8 + true-color is required. Tested on iTerm2, kitty, alacritty, WezTerm, Ghostty, GNOME Terminal. Should work in most modern xterm-256color terminals.\n\n## Requirements\n\n- One or more of: [Claude Code](https://claude.com/code) · [Codex](https://github.com/openai/codex) · [Antigravity CLI / `agy`](https://github.com/google/antigravity-cli) · [Ollama](https://ollama.com)\n- Terminal with UTF-8 + true color\n- macOS / Linux (Windows via WSL — see [Platform](#platform))\n\n## Built with\n\n[OpenTUI](https://opentui.com) (Zig core + React reconciler) on [Bun](https://bun.sh). Single binary via `bun --compile`. No runtime dependencies.\n\n## Docs · changelog · roadmap\n\n- [**CHANGELOG**](./CHANGELOG.md) — what shipped in each tag\n- [**Releases**](https://github.com/fru-dev3/prevail-cli/releases) — pre-built binaries\n- [**Demo vault**](./vault-demo) — synthetic \"Alex Rivera\" persona\n- [**Connector architecture**](./docs/connector-architecture.md) — auth probes, OAuth runner, manual recipes\n- [**Threat model**](./docs/threat-model.md) — long-form threat model + worked example\n- [**Data flow**](./docs/data-flow.md) — how a turn moves through cockpit / vault / log / journal / benchmark\n- [**Extending**](./docs/extending.md) — how to add a framework, lens, CLI bridge, ConfigBar chip, slash command\n\n## Scope\n\nprevAIl is a **single-user terminal cockpit** for personal decisions. You run it on your own machine, with your own AI CLI credentials, against a folder of your own markdown.\n\nIt is **not** a SaaS, **not** multi-tenant, **not** an enterprise audit-log system, **not** a replacement for a knowledge base. If you need any of those, prevAIl is the wrong tool.\n\n\u003e **Vault sync caveat.** If you sync your vault folder via iCloud, Dropbox, Tailscale Drive, git, or any other mechanism, sync should cover `\u003cvault\u003e/` only and **MUST EXCLUDE `~/.prevail/`**. The latter contains secrets (Telegram bot tokens, OAuth refresh tokens) and machine-local state.\n\nThe threat model is documented in [SECURITY.md](./SECURITY.md) and [docs/threat-model.md](./docs/threat-model.md). Read those before exposing the MCP server or the Telegram bridge to anything other than your own laptop.\n\n## License\n\n[GPL-3.0-only](./LICENSE). © 2026 fru.dev. Free software: use, study,\nshare, and modify under the GNU GPL v3; redistributed forks must stay open under\nthe same license. The bundled demo vault contains no real personal data.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffru-dev3%2Fprevail-cli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffru-dev3%2Fprevail-cli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffru-dev3%2Fprevail-cli/lists"}