{"id":48437268,"url":"https://github.com/juacker/clai","last_synced_at":"2026-04-14T10:01:21.306Z","repository":{"id":349206772,"uuid":"1086798116","full_name":"juacker/clai","owner":"juacker","description":"Desktop multi-agent orchestration and monitoring app with MCP-native tools, shared workspaces, and scheduled automations.","archived":false,"fork":false,"pushed_at":"2026-04-04T18:57:18.000Z","size":2449,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-04T20:59:18.083Z","etag":null,"topics":["agent-orchestration","agents-fleet","ai-agents","automation","desktop-app","mcp","monitoring","multi-agent","observability","rust","tauri"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/juacker.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"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":null,"dco":null,"cla":null}},"created_at":"2025-10-30T23:24:08.000Z","updated_at":"2026-04-04T18:56:47.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/juacker/clai","commit_stats":null,"previous_names":["juacker/clai"],"tags_count":15,"template":false,"template_full_name":null,"purl":"pkg:github/juacker/clai","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juacker%2Fclai","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juacker%2Fclai/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juacker%2Fclai/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juacker%2Fclai/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/juacker","download_url":"https://codeload.github.com/juacker/clai/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juacker%2Fclai/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31475202,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-06T08:36:52.050Z","status":"ssl_error","status_checked_at":"2026-04-06T08:36:51.267Z","response_time":112,"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":["agent-orchestration","agents-fleet","ai-agents","automation","desktop-app","mcp","monitoring","multi-agent","observability","rust","tauri"],"created_at":"2026-04-06T14:00:16.593Z","updated_at":"2026-04-06T14:00:28.736Z","avatar_url":"https://github.com/juacker.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"public/icon.svg\" alt=\"CLAI\" width=\"128\" height=\"128\"\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eCLAI\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://opensource.org/licenses/MIT\"\u003e\u003cimg src=\"https://img.shields.io/badge/License-MIT-green.svg\" alt=\"License: MIT\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/juacker/clai/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/v/release/juacker/clai\" alt=\"GitHub release\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/juacker/clai/actions/workflows/ci.yml\"\u003e\u003cimg src=\"https://github.com/juacker/clai/actions/workflows/ci.yml/badge.svg\" alt=\"CI\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  A desktop multi-agent orchestration app with MCP-native tools, local execution capabilities, shared workspaces, and scheduled automations.\n\u003c/p\u003e\n\n\u003cimg width=\"1920\" height=\"1125\" alt=\"image\" src=\"https://github.com/user-attachments/assets/95facd8d-d08c-40c1-8aad-b8f39d2d1d87\" /\u003e\n\n## Features\n\n- **MCP-Native Assistant** - Attach MCP servers to a tab and the assistant uses their tools directly. Each tab scopes its own capability access.\n\n- **Scheduled Automations** - Create automations that run on a schedule with their own MCP servers, filesystem grants, and shell policies.\n\n- **Local Execution** - Agents get a private workspace directory and can optionally read/write additional paths and run shell commands, controlled by per-agent allow/block lists.\n\n- **Shell Access Modes** - Three modes per agent: *Off* (no shell), *Restricted* (only explicitly allowed command prefixes can run), and *Full* (anything not blocked). Prefix matching supports subcommands — allowing `kubectl get` permits `kubectl get pods` but not `kubectl delete`.\n\n- **Run Notices** - When an agent hits a policy denial, the run completes with an amber \"warnings\" state instead of failing silently. The Fleet view surfaces these so you can adjust permissions.\n\n- **Workspace Orchestration** - The assistant can split tiles, add canvas nodes, open anomalies panels, and create dashboard charts as part of a workflow.\n\n- **Canvas and Dashboards** - Automations and chat sessions create visual artifacts directly in the workspace with explicit targets.\n\n- **Tabbed Capability Scopes** - Normal tabs start with no MCP access until you attach servers. Automation tabs inherit their MCP and execution config.\n\n- **Provider Flexibility** - Connect any OpenAI-compatible provider and model, including OpenAI, together.ai, Groq, and local endpoints.\n\n\u003e **Important: local execution is not sandboxed.** Shell commands run as your OS user with full privileges. The allow/block lists control *which commands* the agent can invoke, but do not restrict *what those commands can access* — if you allow `cat`, the agent can read any file your user can, not just the paths in the grant list. Path grants only apply to the built-in `fs.read`/`fs.write` tools, not to shell commands. LLMs can also chain commands in unexpected ways. Always use *Restricted* mode with a minimal allow list, and review run notices to catch anything you didn't anticipate.\n\n## Installation\n\nDownload the latest release for your platform from the [Releases page](https://github.com/juacker/clai/releases):\n\n| Platform | Download |\n|----------|----------|\n| Windows | `.msi` or `.exe` |\n| macOS | `.dmg` |\n| Linux | `.deb`, `.rpm`, or `.flatpak` |\n\n## Getting Started\n\n1. **Connect a provider** - In Settings, add an OpenAI-compatible provider and choose a default model\n2. **Add MCP servers** - Register local or remote MCP servers in Settings\n3. **Attach servers to a tab** - Use the `Add MCP` badge in the tab context bar to grant tools\n4. **Chat or orchestrate** - Ask the assistant to inspect tools, fetch data, open panels, or build visualizations\n5. **Create agents** - Set up scheduled automations with their own MCP servers and local execution policies\n6. **Configure local execution** - Grant filesystem paths and shell access per agent, starting with Restricted mode\n\n## Capability Model\n\nCLAI scopes every capability explicitly:\n\n- **MCP servers** are configured globally in Settings, then attached per tab or per automation\n- **Normal tabs** have no MCP access until you attach servers\n- **Automations** use the MCP servers and execution policy from their config\n- **Built-in tools** handle workspace orchestration — tabs, canvas, dashboards, anomalies panels\n- **Local execution** is per agent: a private workspace directory, optional extra path grants (read-only or read-write), and shell access with prefix-based allow/block lists\n- **Domain tools** come from MCP servers\n\n## Provider Setup\n\nCLAI uses a configured provider plus a default model for chat, Fleet interventions, and scheduled automations.\n\nIn Settings:\n\n- connect an **OpenAI-compatible** provider using an API key\n- optionally set a custom base URL for compatible providers\n- choose the default model for assistant sessions and automations\n\nCompatible with **OpenAI**, **together.ai**, **Groq**, **local OpenAI-compatible endpoints**, and other compatible providers.\n\n## Netdata Cloud Integration\n\nAdding a [Netdata Cloud](https://www.netdata.cloud) MCP server unlocks extra workspace tools:\n\n- **Dashboard charts** — the assistant can add live metric charts directly to the workspace\n- **Anomaly panels** — open dedicated anomaly investigation views for any monitored node\n- **Canvas visualizations** — build visual topologies with metric chart nodes, status badges, and markdown\n\nThese tools (`dashboard.addChart`, `canvas.addChart`, `anomalies.open`) appear automatically when a Netdata-capable MCP server is attached to the session.\n\n## Development\n\n```bash\n# Clone and install\ngit clone https://github.com/juacker/clai.git\ncd clai\nnpm install\n\n# Run the desktop app in development\nmake dev\n\n# Verify builds\nnpm run build\ncargo check --manifest-path src-tauri/Cargo.toml\n```\n\n## Architecture\n\n- **Frontend**: React + Tauri\n- **Workspace runtime**: tabs, split tiles, canvas, dashboards, anomalies panels\n- **Assistant runtime**: session-scoped built-ins + MCP tools, optional fs/shell access\n- **Automation runtime**: scheduled agents with private workspaces and execution policies\n- **MCP support**: per-server config, optional bearer auth, HTTP and stdio transports\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuacker%2Fclai","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjuacker%2Fclai","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuacker%2Fclai/lists"}