{"id":50521888,"url":"https://github.com/opensquilla/opensquilla","last_synced_at":"2026-06-19T23:00:37.377Z","repository":{"id":356201829,"uuid":"1231170332","full_name":"opensquilla/opensquilla","owner":"opensquilla","description":"OpenSquilla — Token-Efficient AI Agent with same budget, higher intelligence density","archived":false,"fork":false,"pushed_at":"2026-06-15T14:16:56.000Z","size":26588,"stargazers_count":4159,"open_issues_count":99,"forks_count":329,"subscribers_count":141,"default_branch":"main","last_synced_at":"2026-06-15T14:23:36.724Z","etag":null,"topics":["agent","ai","ai-agents","deep-learning","foundation-models","llm","mcp","memory","openclaw","python","skills"],"latest_commit_sha":null,"homepage":"https://opensquilla.ai","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/opensquilla.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":"SUPPORT.md","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"docs/agents.md","dco":null,"cla":null}},"created_at":"2026-05-06T17:43:05.000Z","updated_at":"2026-06-15T14:21:46.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/opensquilla/opensquilla","commit_stats":null,"previous_names":["opensquilla/opensquilla"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/opensquilla/opensquilla","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opensquilla%2Fopensquilla","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opensquilla%2Fopensquilla/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opensquilla%2Fopensquilla/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opensquilla%2Fopensquilla/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/opensquilla","download_url":"https://codeload.github.com/opensquilla/opensquilla/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opensquilla%2Fopensquilla/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34550858,"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-19T02:00:06.005Z","response_time":61,"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":["agent","ai","ai-agents","deep-learning","foundation-models","llm","mcp","memory","openclaw","python","skills"],"created_at":"2026-06-03T05:00:34.589Z","updated_at":"2026-06-19T23:00:37.369Z","avatar_url":"https://github.com/opensquilla.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"# OpenSquilla — Token-Efficient AI Agent\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/opensquilla-long-logo.png\" alt=\"OpenSquilla logo\" width=\"500\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cb\u003eSame budget, more capability, better results.\u003c/b\u003e\u003cbr\u003e\n  A microkernel AI agent for your CLI, Web UI, and chat channels.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/opensquilla/opensquilla/actions/workflows/ci.yml\"\u003e\u003cimg src=\"https://img.shields.io/github/actions/workflow/status/opensquilla/opensquilla/ci.yml?style=for-the-badge\" alt=\"CI\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://opensquilla.ai/\"\u003e\u003cimg src=\"https://img.shields.io/badge/website-opensquilla.ai-blue?style=for-the-badge\" alt=\"Website\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/opensquilla/opensquilla/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/v/release/opensquilla/opensquilla?include_prereleases\u0026style=for-the-badge\" alt=\"GitHub release\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.python.org/downloads/\"\u003e\u003cimg src=\"https://img.shields.io/badge/python-3.12%2B-blue?style=for-the-badge\" alt=\"Python 3.12+\"\u003e\u003c/a\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-Apache%202.0-blue?style=for-the-badge\" alt=\"Apache 2.0 License\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n## Overview\n\nOpenSquilla is a token-efficient, microkernel AI agent. A local model\nrouter sends each turn to the cheapest model that can handle it, while\npersistent memory, a layered sandbox, built-in web search, and\non-device embeddings round out a single shared turn loop.\n\nEvery entry point — Web UI, CLI, and chat channels — runs through that\nsame loop, so tool dispatch, retries, and decision logging behave\nidentically everywhere. A pluggable provider layer speaks to\nOpenRouter, OpenAI, Anthropic, Ollama, DeepSeek, Gemini, Qwen/DashScope,\nand 20+ other LLM providers with no change to your code or config\nschema.\n\nOpenSquilla 0.3.1 is the current release.\n\nFor task-oriented product documentation, start with the\n[OpenSquilla Product Guide](README.product.md) or the\n[documentation index](docs/README.md).\n\n---\n\n## Installation\n\nOpenSquilla runs on Windows, macOS, and Linux. Pick the path that\nmatches your use case.\n\nWindows portable and Quick terminal install give you a prebuilt\n**release** — no Git required. The other two — Install from source\nand Develop from source — build **from a Git checkout** (`git clone` +\nGit LFS).\n\nRelease install commands use published GitHub release assets. The\nWindows portable zip also has a `/releases/latest/download/` alias for\nthe current release. Python wheel installs use versioned wheel filenames\nbecause installers validate the version embedded in the wheel filename.\n\n| Path | Audience | When to use |\n| --- | --- | --- |\n| [Windows portable](#windows-portable-no-python) | Windows users | No Python toolchain; one-zip launch |\n| [Quick terminal install](#quick-terminal-install) **(recommended)** | End users on any OS | Release wheel from a terminal |\n| [Install from source](#install-from-source) | Users tracking `main` | Run from a checkout, not edit it |\n| [Develop from source](#develop-from-source) | Contributors | Edit, test, or debug the source |\n\n### Prerequisites\n\n| Requirement | Windows portable | Quick terminal install | Install from source | Develop from source |\n| --- | :---: | :---: | :---: | :---: |\n| Python 3.12+ | bundled | via `uv` | via `uv` or system | via `uv` |\n| Git + Git LFS | — | — | required | required |\n| `uv` | — | installed if missing | recommended | required |\n\nThe default `recommended` profile installs **SquillaRouter** —\nOpenSquilla's on-device model router — and its model assets;\n`OPENSQUILLA_INSTALL_PROFILE=core` omits those dependencies. The\nseparate `--router disabled` onboarding flag keeps the dependencies\ninstalled but turns the router off at runtime.\n\nOn Windows, SquillaRouter's bundled ONNX runtime also needs the Visual\nC++ runtime. The Windows portable launcher and the from-source\nPowerShell installer install it automatically via `winget`; the\n**Quick terminal install** (`uv tool install`) path does not — if\nstartup logs a `DLL load failed` error, install it manually (see\n[Troubleshooting](#troubleshooting)). OpenSquilla keeps running with\ndirect single-model routing until it is installed.\n\nInstall links: [Git](https://git-scm.com/downloads) ·\n[Git LFS](https://git-lfs.com/) ·\n[uv](https://docs.astral.sh/uv/getting-started/installation/).\n\n### Windows portable (no Python)\n\nThe fastest path on Windows — the zip ships a bundled CPython runtime,\nso no separate Python install is required.\n\n1. Download the current portable zip:\n   \u003chttps://github.com/opensquilla/opensquilla/releases/latest/download/OpenSquilla-windows-x64-portable.zip\u003e\n2. Extract it to a writable folder such as Downloads or Documents,\n   then right-click `Start OpenSquilla.cmd` and choose **Run as\n   administrator**.\n3. Complete the first-run setup, then open \u003chttp://127.0.0.1:18791/control/\u003e.\n\n\u003e [!NOTE]\n\u003e Preview builds are unsigned; administrator launch is the supported\n\u003e path. If SmartScreen appears, choose **More info** → **Run anyway**.\n\u003e If Smart App Control or enterprise policy blocks the unsigned app,\n\u003e use [Quick terminal install](#quick-terminal-install) instead.\n\n\u003cdetails\u003e\n\u003csummary\u003eAdvanced portable usage\u003c/summary\u003e\n\nProvide an OpenRouter key before first start:\n\n```powershell\n$env:OPENROUTER_API_KEY=\"sk-...\"\nSet-ExecutionPolicy -Scope Process Bypass\n.\\start.ps1\n```\n\nIf `OPENROUTER_API_KEY` is set and no local config exists, the launcher\nwrites an env-reference config and starts the gateway without\nprompting. If unset, the onboarding wizard lets you pick any supported\nprovider.\n\nThe portable zip does not install a global `opensquilla` command. For a\nterminal where `opensquilla …` works, run `OpenSquilla Shell.cmd`, or\ncall the bundled launcher directly:\n\n```powershell\n.\\opensquilla.cmd onboard --provider openrouter --api-key-env OPENROUTER_API_KEY\n```\n\n\u003c/details\u003e\n\n### Quick terminal install\n\nThe recommended path on Windows, macOS, and Linux. `uv` installs\nOpenSquilla into its own isolated environment and manages its own\nPython — no system Python required. This path installs published\nreleases only; for `main`, development branches, or local checkouts\nuse [Install from source](#install-from-source).\n\n**1. Install `uv`** — skip if `uv --version` already works.\n\nLinux / macOS:\n\n```sh\ncurl -LsSf https://astral.sh/uv/install.sh | sh\n. \"$HOME/.local/bin/env\"\n```\n\nWindows PowerShell:\n\n```powershell\npowershell -c \"irm https://astral.sh/uv/install.ps1 | iex\"\n$env:Path = \"$env:USERPROFILE\\.local\\bin;\" + $env:Path\n```\n\n**2. Install OpenSquilla** — the same command on every platform.\n\n```sh\nuv tool install --python 3.12 \"opensquilla[recommended] @ https://github.com/opensquilla/opensquilla/releases/download/v0.3.1/opensquilla-0.3.1-py3-none-any.whl\"\n```\n\nThis installs the OpenSquilla wheel from the release URL, then lets\n`uv` download the dependencies declared by the selected extras. The\ndefault `recommended` extra includes SquillaRouter runtime dependencies\nsuch as ONNX Runtime, LightGBM, NumPy, and tokenizers, so a first install\nneeds network access unless those wheels are already cached.\n\n**3. Configure and run.**\n\n```sh\nopensquilla onboard\nopensquilla gateway run\n```\n\n\u003e [!NOTE]\n\u003e If `opensquilla` is not found right after a fresh `uv` install, open\n\u003e a new terminal, or re-run the PATH line from step 1.\n\nFor a fully pinned install, use the versioned wheel URL:\n`https://github.com/opensquilla/opensquilla/releases/download/v0.3.1/opensquilla-0.3.1-py3-none-any.whl`.\n\n### Install from source\n\nUse this path to run OpenSquilla from a checkout without editing it.\nThe clone is only the package source for the installer; after install,\nuse the `opensquilla` command — do not run `uv run`. Choose\n[Develop from source](#develop-from-source) instead if you intend to\nmodify the code.\n\n1. **Clone with LFS assets**\n\n   ```sh\n   git lfs install\n   git clone https://github.com/opensquilla/opensquilla.git\n   cd opensquilla\n   git lfs pull --include=\"src/opensquilla/squilla_router/models/**\"\n   ```\n\n2. **Run the installer**\n\n   **macOS / Linux**\n\n   ```sh\n   bash scripts/install_source.sh\n   ```\n\n   **Windows PowerShell**\n\n   ```powershell\n   powershell -ExecutionPolicy Bypass -File ./scripts/install_source.ps1\n   ```\n\n   The script installs `.[recommended]` (SquillaRouter + memory + local\n   models) into a dedicated user environment via `uv tool install`,\n   falling back to `python -m pip install --user` when `uv` is\n   unavailable. Open a new terminal if `opensquilla` is not on `PATH`\n   after install.\n\n3. **(optional) Install advanced extras.** Most channels — Feishu,\n   Telegram, DingTalk, QQ, WeCom, Slack, and Discord — work from the\n   base install. The opt-in extras are:\n\n   - `matrix` — Matrix channel (pulls in `matrix-nio`)\n   - `matrix-e2e` — Matrix channel with end-to-end encryption (requires\n     libolm)\n   - `document-extras` — PDF generation via WeasyPrint\n\n   ```sh\n   OPENSQUILLA_INSTALL_EXTRAS=matrix bash scripts/install_source.sh        # macOS / Linux\n   ```\n\n   ```powershell\n   powershell -ExecutionPolicy Bypass -File ./scripts/install_source.ps1 -Extras matrix   # Windows\n   ```\n\n4. **Configure and run** — see [Configuration](#configuration).\n\n\u003cdetails\u003e\n\u003csummary\u003eInstall from source — terminal prerequisites and installer options\u003c/summary\u003e\n\n**Install prerequisites (Git, Git LFS, uv) from a terminal**\n\nWindows PowerShell:\n\n```powershell\nwinget install --id Git.Git -e\nwinget install --id GitHub.GitLFS -e\npowershell -ExecutionPolicy Bypass -c \"irm https://astral.sh/uv/install.ps1 | iex\"\ngit lfs install\n```\n\nmacOS (Homebrew):\n\n```sh\nbrew install git git-lfs uv\ngit lfs install\n```\n\nDebian / Ubuntu:\n\n```sh\nsudo apt update \u0026\u0026 sudo apt install -y git git-lfs\ncurl -LsSf https://astral.sh/uv/install.sh | sh\ngit lfs install\n```\n\nOn Fedora use `sudo dnf install -y git git-lfs`; on Arch use\n`sudo pacman -S --needed git git-lfs`; then install `uv` with the\n`curl` command above. PATH changes from these installers apply to new\nterminal sessions.\n\n**Installer environment variables and PATH checks**\n\n```sh\nOPENSQUILLA_INSTALL_PROFILE=core   bash scripts/install_source.sh   # minimal runtime, no SquillaRouter\nOPENSQUILLA_INSTALL_DRY_RUN=1      bash scripts/install_source.sh   # print the plan only\n```\n\nVerify which `opensquilla` your shell runs with `command -v\nopensquilla` (macOS/Linux) or `where.exe opensquilla` (Windows). If it\nis not on `PATH`, run `uv tool update-shell`. After reinstalling from a\nlocal checkout, restart the gateway so it loads the updated package.\n\n\u003c/details\u003e\n\n### Develop from source\n\nUse this path when you are working on OpenSquilla's source code:\nmaking changes, running tests, or debugging behavior against this\ncheckout. It is not the normal install path. Unlike\n[Install from source](#install-from-source), this path requires `uv`:\n`uv sync` creates a repository-local `.venv`, and `uv run` executes\ncommands against the files in this checkout.\n\n```sh\nuv sync --extra recommended --extra dev\nuv run opensquilla --help\n```\n\nThe `recommended` extra includes SquillaRouter for development too;\nthe `dev` extra installs the test, lint, and typecheck tools. Install\nadditional extras into the same environment you run:\n\n```sh\nuv sync --extra recommended --extra dev --extra matrix\nuv run opensquilla channels status matrix --json\n```\n\nIn this mode, prefix every `opensquilla` command in\n[Configuration](#configuration) with `uv run`. Do not debug a\ndevelopment checkout through a user-local `opensquilla` command — that\ncommand runs in a different Python environment.\n\n---\n\n## Configuration\n\n### First-run setup\n\n`opensquilla onboard` is the interactive first-run wizard. It writes\nthe active config file and keeps provider secrets in environment\nvariables when you pass `--api-key-env`. The router defaults to\n`recommended` (SquillaRouter on supported providers); pass\n`--router disabled` for direct single-model routing.\n\n```sh\nopensquilla onboard                # full interactive wizard\nopensquilla onboard --if-needed    # idempotent: safe for scripts and re-installs\nopensquilla onboard --minimal      # provider only; skip channels and search\nopensquilla onboard status         # inspect every setup section without writing\n```\n\nIn SSH, CI, or any environment without a TTY, use the non-interactive\nform — keep the secret in the environment and pass its **name**, not\nits value:\n\n**Linux / macOS**\n\n```sh\nexport OPENROUTER_API_KEY=\"sk-...\"\nopensquilla onboard --provider openrouter --api-key-env OPENROUTER_API_KEY\n```\n\n**Windows PowerShell**\n\n```powershell\n$env:OPENROUTER_API_KEY=\"sk-...\"\nopensquilla onboard --provider openrouter --api-key-env OPENROUTER_API_KEY\n```\n\nOpenRouter is only an example — substitute any supported provider and\nits API-key variable.\n\nRe-configure one section later without redoing the whole wizard (these\nexamples assume the relevant API key is already in the environment):\n\n```sh\nopensquilla configure provider --provider openai --model gpt-4o --api-key-env OPENAI_API_KEY\nopensquilla configure router --router recommended\nopensquilla configure search   --search-provider brave --api-key-env BRAVE_SEARCH_API_KEY\nopensquilla configure channels\n```\n\nSections: `provider`, `router`, `channels`, `search`,\n`image-generation`, `memory-embedding`. The Web UI exposes the same\ncatalog and status model at `/control/setup`: Provider and Router are\nthe fast path, while Channels, Search, Image generation, and Memory\nembedding sit in the Capability Center and can be configured later.\nEmpty channels are treated as an opt-out, not a failed setup.\n\n**Config load order:** `OPENSQUILLA_GATEWAY_CONFIG_PATH` →\n`./opensquilla.toml` → `~/.opensquilla/config.toml` → built-in\ndefaults. Environment values for individual secrets always win over\nfile values.\n\n### Migrate from OpenClaw or Hermes Agent\n\nIf you already have state under `~/.openclaw` or `~/.hermes`, run a\ndry run first to inspect the migration report, then apply it explicitly:\n\n```sh\nopensquilla migrate openclaw --json\nopensquilla migrate openclaw --apply\n\nopensquilla migrate hermes --json\nopensquilla migrate hermes --apply\n```\n\nUse `opensquilla migrate --source openclaw,hermes --apply` to import\nboth default homes. Add `--migrate-secrets` only after reviewing the dry-run\nreport. See [`MIGRATION.md`](MIGRATION.md) for custom paths and conflict\nhandling.\n\n### Run\n\n```sh\nopensquilla gateway run                # foreground, 127.0.0.1:18791\nopensquilla gateway start --json       # background + health wait\nopensquilla chat                       # interactive REPL\nopensquilla agent -m \"your prompt\"     # one-shot, automation-friendly\n```\n\nOpen the Web UI at \u003chttp://127.0.0.1:18791/control/\u003e. The **Health**\nview shows whether OpenSquilla is ready, what is not ready, and the\nnext recovery steps. From the CLI, run:\n\n```sh\nopensquilla doctor\nopensquilla doctor --json\nopensquilla doctor --config ./opensquilla.toml --json\n```\n\n`/health` and `/healthz` are lightweight liveness endpoints for process\nchecks. `opensquilla doctor` and the Web UI Health view are the readiness\nsurfaces for provider config, memory, logs, search, channels, sandbox\nposture, router, image generation, and recovery guidance. Press\n`Ctrl+C` to stop a foreground gateway.\n\nOther command groups include `sessions`, `skills`, `memory`, `migrate`,\n`cron`, `channels`, `providers`, `models`, and `cost`. Run\n`opensquilla --help` or `opensquilla \u003cgroup\u003e --help` for details.\n\n\u003cdetails\u003e\n\u003csummary\u003eAdvanced configuration — verify a channel, public network binding, Docker\u003c/summary\u003e\n\n**Connect and verify a messaging channel**\n\nChannel saves are config changes, not runtime-connectivity proof.\nRestart the gateway after channel edits, then verify the live channel:\n\n```sh\nopensquilla gateway restart\nopensquilla channels status \u003cname\u003e --json\n```\n\nTreat a channel as connected only when the status payload reports\n`enabled=true`, `configured=true`, and `connected=true`. Feishu\ndefaults to websocket mode, Telegram to polling, and Slack can use\nSocket Mode — none of those modes needs a public URL. Feishu webhook\nmode, Telegram webhook mode, Slack webhook mode, and WeCom require a\npublic, provider-reachable URL.\n\n**Public network binding**\n\nTo reach the Web UI from another machine, bind the gateway to all\ninterfaces and use the host's public IP:\n\n```sh\nopensquilla gateway run --listen 0.0.0.0 --port 18791\n```\n\nPublic access also requires the host firewall or cloud security group\nto allow inbound TCP on that port. Do not expose the gateway with\n`[auth] mode = \"none\"` — configure token auth before binding to\n`0.0.0.0`.\n\n**Docker**\n\nThe compose path runs an `opensquilla:local` image you build yourself.\nBuild it from a source checkout with the Git LFS router assets pulled\n(see [Install from source](#install-from-source) for the clone and\n`git lfs pull`):\n\n```sh\ndocker build -t opensquilla:local .\n```\n\n`./start.sh` (or `start.ps1` on Windows) then runs `docker compose\nup -d` and tails the gateway logs. Docker avoids a host Python\ntoolchain — not the local image build.\n\n\u003c/details\u003e\n\nProvider tiers, sandbox tuning, image generation, and concurrency\nsettings live in `opensquilla.toml.example`.\n\n---\n\n## What's New in 0.3.1\n\nOpenSquilla 0.3.1 is a maintenance release for the 0.3 line. It updates the\nstable install metadata and brings selected channel, chat, provider, and\nworkflow fixes from the integration branch onto the stable release line:\n\n- **Channel setup and replies** — Slack Socket Mode, app mentions, signing\n  secrets, and threaded replies preserve the channel context needed for setup\n  and replies.\n- **Media and voice workflow handoffs** — short-drama/video helper workflows\n  remain bundled, generated media flows have clearer review pauses, and\n  voice/audio handoffs are usable end to end.\n- **Chat formatting** — user message bubbles preserve multiline text and read\n  like authored messages instead of compressed UI labels.\n- **Provider request hardening** — malformed tool-call history is kept away\n  from providers before it becomes invalid request state.\n- **Install and release checks** — installer URLs, release metadata, version\n  consistency tests, and CI impact gates are updated for 0.3.1.\n\nFull notes: [`CHANGELOG.md`](CHANGELOG.md) ·\n[`docs/releases/0.3.1.md`](docs/releases/0.3.1.md).\n\n## What's New in 0.2.1\n\nOpenSquilla 0.2.1 is a maintenance release focused on release-package\nstartup and long-running agent reliability:\n\n- **Windows portable startup** — the portable launcher better detects and\n  bootstraps the Visual C++ runtime needed by the bundled ONNX router.\n- **Long-running agent turns** — tool-heavy WebUI sessions recover more\n  cleanly from oversized tool results, malformed tool calls, artifact\n  delivery handoffs, and degraded final responses.\n- **Cleaner WebUI output** — generated artifact markers are kept out of\n  normal chat replay while delivered files remain visible.\n- **Memory recall scoring** — local and OpenAI-compatible embedding vectors\n  are normalized before semantic search, and strong keyword matches remain\n  usable when vector scores are low.\n\nFull notes: [`CHANGELOG.md`](CHANGELOG.md) ·\n[release notes](https://opensquilla.ai/news/).\n\n## What's New in 0.2.0\n\nThis release expands OpenSquilla across migration, CLI chat, channels,\nscheduling, and long-running tool work:\n\n- **Migration path from existing agent homes** — `opensquilla migrate` previews\n  and applies imports from existing OpenClaw/Hermes homes, including memory,\n  persona files, skills, MCP/channel config, conflict handling, and migration\n  reports.\n- **Usable chat CLI** — `opensquilla chat` now has a persistent terminal UI,\n  streaming output, queued input, slash-mode discovery, tool/status strips, and\n  more deterministic live prompt behavior.\n- **Cross-surface cron automation** — cron jobs now cover structured schedules,\n  timezone-aware exact/every/cron runs, channel or webhook delivery, failure\n  destinations, manual runs, and WebUI/CLI/RPC parity.\n- **Better Feishu and Discord channels** — channel adapters expose clearer\n  capability metadata, safer DM/group handling, native file and artifact paths,\n  and improved attachment/thread behavior while privileged actions stay scoped.\n- **Sturdier long-running turns** — failed turns are kept out of provider\n  replay, malformed tool calls are handled more safely, and approval-gated\n  retries wait for operator decisions.\n- **Smarter context and tool budgeting** — provider-budget compaction, prompt\n  cache preservation, bounded tool results, and side-effect-aware concurrency\n  make large tool-heavy sessions more predictable.\n- **Web UI and release polish** — recency ordering, table layout, mobile\n  controls, duplicate notifications, setup forms, release URLs, and install\n  paths are tightened for 0.2.0.\n\nFull notes: [`CHANGELOG.md`](CHANGELOG.md) ·\n[release notes](https://opensquilla.ai/news/).\n\n---\n\n## Key Features\n\n| Capability | What it does |\n| --- | --- |\n| **Token-efficient routing** | `SquillaRouter` — a local LightGBM + ONNX classifier in the `recommended` extra — scores each turn on length, language, code, keywords, and semantic embeddings, then routes it across four tiers (T0–T3) to the cheapest capable model. Classification runs on-device; your prompt never leaves the machine to make that decision. |\n| **Adaptive reasoning and prompts** | OpenSquilla requests extended reasoning only for turns the router scores as complex, and the system prompt scales with task complexity — lightweight for trivial turns, full instructions for complex ones. |\n| **20+ LLM providers** | The provider registry targets 20+ LLM backends — OpenRouter, OpenAI, Anthropic, Ollama, DeepSeek, Gemini, DashScope/Qwen, Moonshot, Mistral, Groq, Zhipu, SiliconFlow, vLLM, LM Studio, and more, with primary-plus-fallback selection; first-run onboarding exposes the verified subset. |\n| **On-demand skills and MCP** | 15 bundled skills (coding, GitHub, cron, pptx/docx/xlsx/pdf, summarization, tmux, weather, and more) load only when the task needs them. OpenSquilla is an MCP client, and can also run as an MCP server — `opensquilla mcp-server run` needs the `mcp` extra (install `opensquilla[recommended,mcp]`). Skills can be authored, installed, and published from the CLI. |\n| **Persistent local memory** | A curated `MEMORY.md` plus dated Markdown notes, searched with SQLite full-text keyword search and `sqlite-vec` semantic recall. Embeddings run on-device via bundled ONNX, or swap to OpenAI/Ollama. Optional exponential decay and opt-in \"dream\" consolidation are available. |\n| **Layered security sandbox** | Three policy tiers (Standard / Strict / Locked) on a permission matrix. Bubblewrap isolates code execution on Linux; the macOS Seatbelt backend currently renders profiles only (execution pending), and there is no sandbox backend on Windows yet. A denial ledger auto-pauses autonomous runs after repeated denials, rejected outputs are purged, and skill metadata and tool results are XML-escaped against prompt injection. |\n| **Built-in tools** | File read/write/edit, shell and background processes, git, web search (Brave or DuckDuckGo) and fetch behind an SSRF guard, spreadsheet/PPTX/PDF authoring, image generation, and text-to-speech. |\n| **Unified gateway** | A Starlette ASGI server on `127.0.0.1:18791` with WebSocket RPC and an embedded control console (`/control/`). Web UI, CLI, and channels for Terminal, WebSocket, Slack, Telegram, Discord, Feishu, DingTalk, WeCom, Matrix, and QQ all share one `TurnRunner`. |\n| **Durable sessions, subagents, and scheduling** | SQLite-backed session, transcript, and replay storage with per-agent workspaces. Agents spawn depth-bounded subagents, and a `SchedulerEngine` with an in-tree cron parser runs recurring jobs via `opensquilla cron`. |\n| **Operator controls** | Human-in-the-loop approvals can pause sensitive tool calls for a decision; per-turn and per-session token and cost rollups (`opensquilla cost`) and diagnostics are available from the CLI and Web UI. |\n\nMetaSkill docs: [`docs/features/meta-skills.md`](docs/features/meta-skills.md),\n[`docs/features/meta-skill-user-guide.md`](docs/features/meta-skill-user-guide.md),\nand [`docs/authoring/meta-skills.md`](docs/authoring/meta-skills.md).\n\n---\n\n## Benchmark Results\n\nPinchBench 1.2.1 average results across 25 tasks:\n\n| Agent | Base Model | Avg. score | Total input tokens | Total output tokens | Total cost |\n| --- | ---: | ---: | ---: | ---: | ---: |\n| OpenSquilla | Model router (Opus4.7, GLM5.1, DS4 Flash) | 0.9251 | 1,721,328 | 61,475 | $0.688 |\n| OpenClaw | Claude Opus 4.7 | 0.9255 | 3,066,243 | 50,890 | $6.233 |\n\nScore is the mean across the 25 tasks; token counts and cost are\ntotals for the full run.\n\n---\n\n## Troubleshooting\n\n\u003cdetails\u003e\n\u003csummary\u003eWindows: \u003ccode\u003eDLL load failed\u003c/code\u003e / Visual C++ runtime\u003c/summary\u003e\n\nIf startup logs `DLL load failed while importing\nonnxruntime_pybind11_state`, OpenSquilla keeps running with direct\nsingle-model routing, but the bundled `SquillaRouter` runtime stays\ninactive until the Visual C++ Redistributable for Visual Studio\n2015–2022 (x64) is installed.\n\nThe Windows portable launcher and the from-source PowerShell installer\nattempt to install the redistributable via `winget`. If you used Quick\nterminal install, or `winget` is unavailable, install it manually and\nrestart PowerShell: \u003chttps://aka.ms/vs/17/release/vc_redist.x64.exe\u003e.\nThen restore the recommended router:\n\n```powershell\nopensquilla onboard --provider openrouter --api-key-env OPENROUTER_API_KEY --router recommended\nopensquilla gateway restart\n```\n\n\u003c/details\u003e\n\n---\n\n## Credits\n\nOpenSquilla is inspired by\n[OpenClaw](https://github.com/openclaw/openclaw). Bundled third-party\ncontent is attributed in\n[`THIRD_PARTY_NOTICES.md`](THIRD_PARTY_NOTICES.md).\n\nCommunity contributors are acknowledged in\n[`CONTRIBUTORS.md`](CONTRIBUTORS.md), including release-specific attribution\nnotes for squash-merged or replayed work.\n\n---\n\n## Contributing\n\nContributions of every kind are welcome — bug reports, feature ideas,\ndocumentation, new provider or channel adapters, skills, and core\nruntime work. See [`CONTRIBUTING.md`](CONTRIBUTING.md), then open an\nissue or pull request on\n[GitHub](https://github.com/opensquilla/opensquilla).\n\n[Code of Conduct](CODE_OF_CONDUCT.md) · [Security](SECURITY.md) ·\n[Support](SUPPORT.md) · [License](LICENSE) (Apache-2.0)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopensquilla%2Fopensquilla","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopensquilla%2Fopensquilla","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopensquilla%2Fopensquilla/lists"}