{"id":50024080,"url":"https://github.com/vestin-io/nile","last_synced_at":"2026-06-16T04:01:04.428Z","repository":{"id":358441135,"uuid":"1227180167","full_name":"vestin-io/Nile","owner":"vestin-io","description":"Nile is a macOS app for people who work across multiple AI accounts, providers, and local agent tools.","archived":false,"fork":false,"pushed_at":"2026-05-26T23:24:43.000Z","size":6965,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-27T01:19:42.080Z","etag":null,"topics":["ai-agents","ai-tools","claude","codex","cursor","desktop-app","gemini","menubar","open-source","openclaw","provider-management","quick-access","switcher","ticker","usability"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vestin-io.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-05-02T10:18:23.000Z","updated_at":"2026-05-26T23:24:36.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/vestin-io/Nile","commit_stats":null,"previous_names":["vestin-io/nile"],"tags_count":26,"template":false,"template_full_name":null,"purl":"pkg:github/vestin-io/Nile","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vestin-io%2FNile","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vestin-io%2FNile/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vestin-io%2FNile/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vestin-io%2FNile/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vestin-io","download_url":"https://codeload.github.com/vestin-io/Nile/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vestin-io%2FNile/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34390052,"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-16T02:00:06.860Z","response_time":126,"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-agents","ai-tools","claude","codex","cursor","desktop-app","gemini","menubar","open-source","openclaw","provider-management","quick-access","switcher","ticker","usability"],"created_at":"2026-05-20T11:02:11.704Z","updated_at":"2026-06-16T04:01:04.423Z","avatar_url":"https://github.com/vestin-io.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Nile\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./assets/icons/nile-mark.svg\" alt=\"Nile mark\" width=\"160\" /\u003e\n\u003c/p\u003e\n\nNile is a desktop app for people who work across multiple AI accounts, providers, and local agent tools.\n\nIt gives you one place to save connections, switch the active setup for local tools like Codex, Claude, Cursor, Gemini CLI, and OpenClaw, and keep those changes understandable instead of hidden across scattered config files.\n\n## Why Nile\n\nIf you regularly move between personal and work accounts, direct provider APIs and gateway endpoints, or different agent tools, local setup gets messy fast. Nile is built to make that switching predictable.\n\nWith Nile you can:\n\n- save multiple AI connections in one place\n- switch the active connection for supported local agents\n- keep your saved connections protected without scattering secrets across local config files\n- see what is currently active, what is saved, and where things have drifted\n- securely back up, restore, and move saved connections between machines\n- use either a desktop UI or a CLI, depending on how you work\n\n## Product Surfaces\n\n### Desktop app\n\n\u003cimg src=\"./assets/preview/demo.gif\" alt=\"Nile desktop app demo\" width=\"960\" /\u003e\n\nThe desktop app is the primary Nile surface. This is where you add connections, review supported agents, save authenticated sessions, and switch active local setups without digging through scattered config files.\n\n### Menubar\n\n\u003cp\u003e\n  \u003cimg src=\"./assets/preview/menubar2.png\" alt=\"Nile menubar picker preview\" height=\"220\" /\u003e\n  \u003cimg src=\"./assets/preview/menubar.png\" alt=\"Nile menubar preview\" height=\"220\" /\u003e\n\u003c/p\u003e\n\nThe menubar gives you a lighter-weight status and switching surface. It is useful when you want to quickly check what is active, inspect saved connections, or change context without opening the full desktop window.\n\n### CLI\n\n![Nile CLI preview](./assets/preview/cli.png)\n\nThe CLI is for local workflows, scripting, and terminal-first usage. It exposes the same connection model in a form that fits automation and fast inspection.\n\nCommon CLI entry points:\n\n```bash\nnile status\nnile list\nnile add\nnile codex import\nnile codex use \u003cconnectionId\u003e\nnile cursor usage auto-bind \u003cconnectionId\u003e\n```\n\n`nile status`, `nile list`, and `nile history` are human-readable by default. Add `--json` when you want structured output.\n\nCanonical project terms live in [GLOSSARY.md](./GLOSSARY.md).\n\n## What It Supports Today\n\nCurrent surface area:\n\n- macOS and Windows desktop app\n- command-line interface\n- local connection switching for `codex`, `claude`, `cursor`, `gemini`, and `openclaw`\n\nCurrent connection types:\n\n- OpenAI API keys\n- OpenAI session auth imported from Codex\n- OpenClaw-compatible OpenAI session auth\n- Claude session auth\n- Cursor session auth\n- Gemini CLI Google session auth\n- provider-compatible gateway endpoints\n- Azure OpenAI endpoints\n\nCurrent provider presets:\n\n- OpenAI\n- Gateway\n- Azure OpenAI\n- Anthropic\n- Cursor\n- Gemini CLI\n\nCurrent caveats:\n\n- Gemini quota, usage, and model detection rely on internal Code Assist endpoints. If the saved Gemini CLI OAuth token expires, Nile will ask you to refresh that local session.\n- Nile is built to carry forward existing local state across upgrades. If an older local state shape becomes incompatible, Nile should fail with a recoverable reset path instead of silently dropping state.\n\nCredential storage and portability:\n\n- each machine uses one credential storage mode at a time:\n  - `System secure storage`\n  - `Encrypted local storage`\n- `Encrypted local storage` uses a local unlock passphrase for the current app session\n- Nile can export and import encrypted migration packages from the Connections page\n- migration packages use a dedicated export passphrase and can be used to move selected connections between machines\n- import supports preview, partial selection, duplicate detection, and `skip existing` or `replace existing`\n\n## How It Feels\n\nNile is designed around a simple loop:\n\n1. Add or import a connection.\n2. See which agents that connection can support.\n3. Save it once.\n4. Switch when needed.\n5. Check status, history, and usage-aware signals when something changes.\n\nThe goal is not to be another chat UI. Nile sits underneath the tools you already use and manages the local connection layer around them.\n\n## Current Status\n\nNile is still early, but the core workflow is real and working:\n\n- desktop setup and switching flow\n- CLI setup and switching flow\n- system secure storage and encrypted local storage\n- encrypted connection portability through `.nilevault` migration packages\n- macOS signed/notarized desktop release pipeline\n- Windows desktop support\n\nCurrent limits:\n\n- local tooling workflows only\n- Linux support is not in scope yet\n\n## Development\n\nInstall dependencies:\n\n```bash\nnpm install\n```\n\nRun typecheck:\n\n```bash\nnpm run typecheck\n```\n\nRun tests:\n\n```bash\nnpm test\n```\n\nRun the CLI locally:\n\n```bash\nnpm start\n```\n\nBuild the desktop app shell:\n\n```bash\nnpm run desktop:build\n```\n\nStart the desktop app locally:\n\n```bash\nnpm run desktop:start\n```\n\nPackage the desktop app locally without signing:\n\n```bash\nnpm run build:app:unsigned --prefix apps/desktop\n```\n\nFor signed desktop release operations, see [docs/desktop-release.md](./docs/desktop-release.md).\n\nFor desktop credential storage, unlock behavior, and `.nilevault` import/export flow, see [docs/desktop-credentials.md](./docs/desktop-credentials.md).\n\n## Repository Layout\n\n- `apps/desktop`: Electron desktop app\n- `apps/cli`: CLI surface\n- `packages/core`: shared connection, credential, and apply logic\n- `packages/host-local`: host-specific local integrations\n- `assets/icons`: shared brand assets\n- `docs`: supporting documentation\n\n## License\n\nMIT. See [LICENSE](./LICENSE).\n\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvestin-io%2Fnile","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvestin-io%2Fnile","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvestin-io%2Fnile/lists"}