{"id":49828773,"url":"https://github.com/redhat-developer/abbenay","last_synced_at":"2026-05-13T19:02:51.811Z","repository":{"id":345540152,"uuid":"1178041603","full_name":"redhat-developer/abbenay","owner":"redhat-developer","description":"A unified AI daemon and library for OpenAI, Anthropic, Google Gemini, Mistral, Ollama, and 10+ more providers.","archived":false,"fork":false,"pushed_at":"2026-05-05T16:19:26.000Z","size":831,"stargazers_count":3,"open_issues_count":6,"forks_count":2,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-05T18:22:46.394Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/redhat-developer.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"docs/ROADMAP.md","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-03-10T16:19:01.000Z","updated_at":"2026-05-05T16:19:31.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/redhat-developer/abbenay","commit_stats":null,"previous_names":["redhat-developer/abbenay"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/redhat-developer/abbenay","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redhat-developer%2Fabbenay","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redhat-developer%2Fabbenay/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redhat-developer%2Fabbenay/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redhat-developer%2Fabbenay/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/redhat-developer","download_url":"https://codeload.github.com/redhat-developer/abbenay/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redhat-developer%2Fabbenay/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32995915,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-13T13:14:54.681Z","status":"ssl_error","status_checked_at":"2026-05-13T13:14:51.610Z","response_time":115,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":[],"created_at":"2026-05-13T19:02:50.934Z","updated_at":"2026-05-13T19:02:51.804Z","avatar_url":"https://github.com/redhat-developer.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Abbenay\n\n[![CI](https://github.com/redhat-developer/abbenay/actions/workflows/ci.yml/badge.svg)](https://github.com/redhat-developer/abbenay/actions/workflows/ci.yml)\n\nA unified AI daemon and library for OpenAI, Anthropic, Google Gemini, Mistral, Ollama, and 10+ more providers.\n\n## Packages\n\nAbbenay produces two packages from a single source tree:\n\n| Package | What | For |\n|---------|------|-----|\n| **@abbenay/core** | Lightweight library — LLM engine abstraction, streaming chat, model discovery, config, secret store interface. Zero transport deps. | Agent developers, web developers, custom apps |\n| **@abbenay/daemon** | Complete application — gRPC server, web dashboard, CLI, VS Code backchannel, SEA binary. Bundles core internally. | End users running the daemon |\n\n## Features\n\n- **19 LLM engines** via the [Vercel AI SDK](https://sdk.vercel.ai/) with dynamic provider loading\n- **OpenAI-compatible API**: Drop-in `/v1/chat/completions` for Cursor, Continue, aider, etc.\n- **CLI chat**: Interactive terminal chat with tool approval and session persistence\n- **Session management**: Persistent conversations with periodic LLM-generated summaries\n- **Unified daemon**: TypeScript/Node.js service serves all clients via gRPC, REST, and SSE\n- **Web dashboard**: Configure providers, API keys, and models via browser UI\n- **VS Code integration**: Models appear in VS Code's Language Model picker\n- **Reusable core library**: Use `@abbenay/core` in your own apps without the daemon\n- **Tool calling**: Full tool execution loop with MCP support and approval policies\n- **MCP aggregation**: Connect to external MCP servers, expose daemon as MCP server\n- **Dynamic model discovery**: Fetches available models from provider APIs\n- **Single Executable Application (SEA)**: Self-contained binary, no Node.js install required\n\n## Why \"Abbenay\"?\n\n**Abbenay** is the central settlement on the anarchist moon Anarres in Ursula K. Le Guin's *The Dispossessed* (1974). The name means \"mind\" in the constructed language Pravic.\n\nThe name fits this project on three levels: it literally means *mind* (an AI/LLM tool), it comes from a society built on openness and shared resources rather than proprietary ownership (the open alternative to vendor lock-in), and Abbenay itself is a coordination hub in a decentralized world -- exactly what this daemon does for LLM providers, VS Code, and MCP servers.\n\n## Architecture\n\n```\n┌─────────────────────────────────────────────────────────────────────────┐\n│  Clients                                                                 │\n│  ├── VS Code Extension (gRPC)                                            │\n│  ├── Web Dashboard (HTTP, embedded)                                      │\n│  ├── Python scripts (gRPC)                                               │\n│  └── Custom apps (@abbenay/core)                                         │\n└─────────────────────────────────────────────────────────────────────────┘\n                              │ gRPC (Unix socket) or direct library use\n                              ▼\n┌─────────────────────────────────────────────────────────────────────────┐\n│  abbenay daemon (TypeScript/Node.js)                                    │\n│                                                                          │\n│  ┌─ @abbenay/core ──────────────────────────────────────────────────┐   │\n│  │  CoreState       engines.ts (Vercel AI SDK)    config.ts (YAML)   │   │\n│  │  SecretStore     streaming chat + tools        model discovery    │   │\n│  └───────────────────────────────────────────────────────────────────┘   │\n│                                                                          │\n│  ┌─ daemon layer ────────────────────────────────────────────────────┐   │\n│  │  DaemonState     gRPC server         Web UI (Express)             │   │\n│  │  CLI (Commander) VS Code backchannel KeychainSecretStore (keytar) │   │\n│  └───────────────────────────────────────────────────────────────────┘   │\n│                                                                          │\n└──────────────────────────────────────────┬──────────────────────────────┘\n                                           │ HTTP\n                                           ▼\n                               ┌──────────────────────┐\n                               │   LLM Provider APIs   │\n                               │   (OpenAI, Anthropic,  │\n                               │    Gemini, Ollama...)   │\n                               └──────────────────────┘\n```\n\n## Quick Start\n\n\u003e **Binary names:** If you installed via npm, use `aby` (or `abbenay`).\n\u003e If you downloaded a release binary, it is named\n\u003e `abbenay-daemon-\u003cplatform\u003e-\u003carch\u003e` — rename or symlink it to `aby` for\n\u003e convenience. All examples below use `aby`.\n\n### Start everything\n\n```bash\naby start                     # Start daemon + web dashboard + OpenAI API + MCP\n```\n\nOr start services individually:\n\n```bash\naby daemon                    # gRPC daemon only\naby web                       # Web dashboard at http://localhost:8787\naby serve                     # OpenAI-compatible API at http://localhost:8787\naby status                    # Check if daemon is running\naby stop                      # Stop the daemon\n```\n\n### Chat\n\n```bash\naby chat -m openai/gpt-4o                # Interactive chat\naby chat -m ollama/llama3.2 -s \"Be concise\"  # With system prompt\naby chat -m openai/gpt-4o --session new  # Start a persistent session\naby chat --session \u003cid\u003e                  # Resume a session\n```\n\n### Sessions\n\n```bash\naby sessions list                        # List saved sessions\naby sessions show \u003cid\u003e                   # Show session messages\naby sessions delete \u003cid\u003e                 # Delete a session\n```\n\n### Model discovery\n\n```bash\naby list-engines                         # Show all supported engines\naby list-models                          # Show configured models\naby list-models --discover ollama        # Discover models from a provider\naby list-models --discover openai        # Reads OPENAI_API_KEY from env\n```\n\n### OpenAI-compatible API\n\nAny tool that speaks the OpenAI protocol can use Abbenay as a backend:\n\n```bash\naby serve -p 8787\n\n# Then point your client at it:\ncurl http://localhost:8787/v1/models\ncurl http://localhost:8787/v1/chat/completions \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"model\": \"openai/gpt-4o\", \"messages\": [{\"role\": \"user\", \"content\": \"Hello\"}]}'\n```\n\nWorks with Cursor, Continue, aider, and any `openai` SDK script.\n\n### Using the core library\n\n```typescript\nimport { CoreState, MemorySecretStore } from '@abbenay/core';\n\nconst core = new CoreState({ secretStore: new MemorySecretStore() });\n\nawait core.addProvider('my-openai', {\n  engine: 'openai',\n  apiKey: process.env.OPENAI_API_KEY!,\n  models: { 'gpt-4o': {} },\n});\n\nfor await (const chunk of core.chat('my-openai/gpt-4o', [\n  { role: 'user', content: 'Hello!' },\n])) {\n  if (chunk.type === 'text') process.stdout.write(chunk.text);\n}\n```\n\nSee [docs/CORE.md](docs/CORE.md) for the full library API reference.\n\n### Building from source\n\n**Prerequisites:** `curl` and `bash` (that's it).\n\nThe bootstrap script downloads the correct Node.js (with SEA fuse) and [uv](https://docs.astral.sh/uv/) into `.build-tools/`. No system Node.js or Python required.\n\n```bash\n./bootstrap.sh                 # downloads node + uv\nsource .build-tools/env.sh     # puts them on PATH\nnpm install                    # install dependencies\nnode build.js                  # full build: SEA + VSIX + zip\n```\n\nTo build and install the VSIX into VS Code:\n\n```bash\nnode build.js --code-install\n```\n\nSee [docs/GETTING_STARTED.md](docs/GETTING_STARTED.md) for a complete walkthrough, or [docs/DEVELOPMENT.md](docs/DEVELOPMENT.md) for all platforms, CI details, and build options.\n\n## Supported Engines\n\n| Engine | ID | Key Required | Tool Calling | SDK Package |\n|--------|----|-------------|-------------|-------------|\n| OpenAI | `openai` | Yes | Yes | `@ai-sdk/openai` |\n| Anthropic | `anthropic` | Yes | Yes | `@ai-sdk/anthropic` |\n| Google Gemini | `gemini` | Yes | Yes | `@ai-sdk/google` |\n| Mistral | `mistral` | Yes | Yes | `@ai-sdk/mistral` |\n| xAI (Grok) | `xai` | Yes | Yes | `@ai-sdk/xai` |\n| DeepSeek | `deepseek` | Yes | Yes | `@ai-sdk/deepseek` |\n| Groq | `groq` | Yes | Yes | `@ai-sdk/groq` |\n| Cohere | `cohere` | Yes | Yes | `@ai-sdk/cohere` |\n| Amazon Bedrock | `bedrock` | No* | Yes | `@ai-sdk/amazon-bedrock` |\n| Fireworks | `fireworks` | Yes | Yes | `@ai-sdk/fireworks` |\n| Together AI | `togetherai` | Yes | Yes | `@ai-sdk/togetherai` |\n| Perplexity | `perplexity` | Yes | No | `@ai-sdk/perplexity` |\n| Azure OpenAI | `azure` | Yes | Yes | `@ai-sdk/openai-compatible` |\n| OpenRouter | `openrouter` | Yes | Yes | `@ai-sdk/openai-compatible` |\n| Ollama | `ollama` | No | Yes | `@ai-sdk/openai-compatible` |\n| LM Studio | `lmstudio` | No | Yes | `@ai-sdk/openai-compatible` |\n| Cerebras | `cerebras` | Yes | Yes | `@ai-sdk/openai-compatible` |\n| Meta (Llama) | `meta` | Yes | Yes | `@ai-sdk/openai-compatible` |\n| Mock | `mock` | No | No | *(built-in)* |\n\n\\* Amazon Bedrock uses AWS credential chain, not an API key.\n\nAI SDK provider packages are **dynamically loaded** — install only the ones you use.\n\n## Configuration\n\n### Config files\n\n- **User level**: `~/.config/abbenay/config.yaml`\n- **Workspace level**: `\u003cworkspace\u003e/.config/abbenay/config.yaml`\n\n### Example\n\n```yaml\nproviders:\n  my-openai:\n    engine: openai\n    api_key_keychain_name: \"OPENAI_API_KEY\"\n    models:\n      gpt-4o: {}\n      gpt-4o-mini:\n        temperature: 0.3\n\n  anthropic-work:\n    engine: anthropic\n    api_key_env_var_name: \"ANTHROPIC_API_KEY\"\n    models:\n      claude-sonnet-4-20250514: {}\n\n  local-ollama:\n    engine: ollama\n    models:\n      llama3.2: {}\n```\n\nSee [docs/CONFIGURATION.md](docs/CONFIGURATION.md) for the full config reference.\n\n## Project Structure\n\n```\nabbenay/\n├── packages/\n│   ├── daemon/                # TypeScript daemon + core library\n│   │   ├── src/\n│   │   │   ├── core/          # @abbenay/core (reusable library)\n│   │   │   │   ├── index.ts   # Public API exports\n│   │   │   │   ├── state.ts   # CoreState class\n│   │   │   │   ├── engines.ts # Engine registry (Vercel AI SDK)\n│   │   │   │   ├── config.ts  # YAML config loader\n│   │   │   │   ├── secrets.ts # SecretStore interface + MemorySecretStore\n│   │   │   │   ├── paths.ts   # Platform-aware paths\n│   │   │   │   └── mock.ts    # Mock engine for testing\n│   │   │   └── daemon/        # Daemon-specific (gRPC, web, CLI)\n│   │   │       ├── index.ts   # CLI entry point (Commander)\n│   │   │       ├── state.ts   # DaemonState extends CoreState\n│   │   │       ├── daemon.ts  # Process lifecycle\n│   │   │       ├── transport.ts\n│   │   │       ├── server/    # gRPC service handlers\n│   │   │       ├── web/       # Express web server\n│   │   │       └── secrets/   # KeychainSecretStore (keytar)\n│   │   ├── static/            # Web dashboard HTML\n│   │   ├── tests/             # Integration tests\n│   │   └── build.js           # SEA + core package builder\n│   ├── vscode/                # VS Code extension\n│   ├── python/                # Python gRPC client\n│   └── proto-ts/              # Generated TypeScript proto stubs\n├── proto/                     # gRPC service definition\n├── docs/                      # Documentation\n└── build.js                   # Monorepo build orchestrator\n```\n\n## Documentation\n\n- [Getting Started](docs/GETTING_STARTED.md)\n- [Core Library (API Reference)](docs/CORE.md)\n- [Architecture](docs/ARCHITECTURE.md)\n- [Configuration](docs/CONFIGURATION.md)\n- [Container Deployment](docs/CONTAINER.md)\n- [Development Guide](docs/DEVELOPMENT.md)\n- [Testing](docs/TESTING.md)\n- [Roadmap](docs/ROADMAP.md)\n- [Product Overview](docs/PRODUCT_OVERVIEW.md)\n- [Landscape Comparison](docs/LANDSCAPE.md)\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fredhat-developer%2Fabbenay","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fredhat-developer%2Fabbenay","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fredhat-developer%2Fabbenay/lists"}