{"id":45498994,"url":"https://github.com/itlackey/openpalm","last_synced_at":"2026-06-26T09:01:37.114Z","repository":{"id":339065091,"uuid":"1159761516","full_name":"itlackey/openpalm","owner":"itlackey","description":"Personal AI assistant(s) powered by OpenCode","archived":false,"fork":false,"pushed_at":"2026-06-21T21:10:09.000Z","size":21033,"stargazers_count":34,"open_issues_count":13,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-21T22:09:38.502Z","etag":null,"topics":["ai-assistant","chatbot","discord-bot","docker","memory","opencode","self-hosted"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/itlackey.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":".github/SECURITY.md","support":null,"governance":null,"roadmap":".github/roadmap/0.10.0/README.md","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-02-17T05:56:04.000Z","updated_at":"2026-06-21T21:10:13.000Z","dependencies_parsed_at":null,"dependency_job_id":"1857d03e-cbcd-48b5-94aa-cd9f4912b601","html_url":"https://github.com/itlackey/openpalm","commit_stats":null,"previous_names":["itlackey/openpalm"],"tags_count":200,"template":false,"template_full_name":null,"purl":"pkg:github/itlackey/openpalm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itlackey%2Fopenpalm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itlackey%2Fopenpalm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itlackey%2Fopenpalm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itlackey%2Fopenpalm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/itlackey","download_url":"https://codeload.github.com/itlackey/openpalm/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itlackey%2Fopenpalm/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34628453,"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-21T02:00:05.568Z","response_time":54,"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-assistant","chatbot","discord-bot","docker","memory","opencode","self-hosted"],"created_at":"2026-02-22T18:15:14.628Z","updated_at":"2026-06-26T09:01:37.108Z","avatar_url":"https://github.com/itlackey.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg src=\"packages/ui/static/banner.png\" alt=\"OpenPalm\" width=\"500\" /\u003e\n\n\u003cp\u003e\n  \u003cstrong\u003eYour own AI assistant. Private, self-hosted, no hype required.\u003c/strong\u003e\n\u003c/p\u003e\n\n---\n\n## What is this?\n\nOpenPalm is two things: a **harness** and a **stack**.\n\n**The harness** runs on your machine — either as a CLI binary or an Electron desktop app. It manages a single directory (`~/.openpalm/`) that contains plain files you can read and edit:\n\n- Docker Compose files and addon overlays\n- Environment variable files (system config, principal secret files, user API keys)\n- OpenCode configuration (model, providers, persona)\n- AKM configuration (memory, embeddings, knowledge stash)\n- Voice and portal configuration\n\nThe harness job is unglamorous: download Docker images, place the right content in the right files, and start `docker compose up`. That's the entire control plane. If you prefer, you can skip the harness entirely and manage those files by hand.\n\n**The stack** is what the harness runs. At its core:\n\n- An **OpenCode assistant** in Docker — your AI, talking to whatever model you point it at, with persistent memory and skills via AKM\n- A **Guardian** — the only way in from the outside, enforcing principal-authenticated ingress, ownership checks, and rate limiting on every request, with optional fail-closed content validation (heuristic screen + local OpenCode moderator) when enabled\n- Optional **portal containers** — Discord, Slack, voice chat, or anything you build — each one just a compose overlay\n\nOfficial clients are the Electron desktop app and the OpenCode web interface (served directly by the assistant container). Everything else reaches the assistant through a portal/direct-ingress → guardian pipeline.\n\n---\n\nOpenPalm started as a hobby project — a weekend experiment to see if a useful AI assistant could be built on boring, standard tools. Turns out it can. It's now a daily driver, and it keeps getting better.\n\nNo proprietary orchestration layer, no magic runtime, no lock-in. Just containers, env files, and compose overlays. If you can run `docker compose up`, you can run OpenPalm.\n\n## Where things stand\n\n**0.12.0** is the stabilization and hardening release. It builds on the 0.11.0 architecture — assistant, guardian, portal/direct ingress, and the AKM memory/skills layer, all in daily use — and focuses on install/upgrade lifecycle robustness, safer migrations, better error recovery, and a self-updating control plane that avoids unnecessary desktop-app re-downloads. It also completes the channels → portals rename.\n\nIf you're running OpenPalm today, 0.12.0 is the release to be on.\n\n\n## What you get\n\n- **An AI assistant that's yours** — Runs on [OpenCode](https://opencode.ai), talks to any OpenAI-compatible model (local or remote), and remembers things between sessions.\n- **Portals** — Talk to your assistant through a web chat, an API, Discord, Slack, or build your own adapter.\n- **Security by default** — Every ingress request passes through guardian principal authentication, ownership checks, and rate limiting before it reaches the assistant. The assistant itself has no Docker socket access.\n- **Plain files all the way down** — The stack is Docker Compose files. Config is env files. Addons are compose overlays. No database for state, no hidden config, nothing you can't `cat`.\n- **LAN-first** — Nothing is exposed to the internet unless you explicitly choose to expose it.\n\n## Get started\n\n**1. Install Docker (with Compose V2)** — OpenPalm runs your assistant in Docker containers.\n\n| Platform | Get Docker |\n|---|---|\n| **Mac** | [Docker Desktop](https://www.docker.com/products/docker-desktop/) or [OrbStack](https://orbstack.dev/download) |\n| **Windows** | [Docker Desktop](https://www.docker.com/products/docker-desktop/) |\n| **Linux** | [Docker Engine](https://docs.docker.com/engine/install/) (`curl -fsSL https://get.docker.com \\| sh`) |\n\n**2. Download the OpenPalm desktop app** — Recommended for most users.\n\n| Platform | Download | Run |\n|---|---|---|\n| **Mac (Apple Silicon)** | [OpenPalm‑arm64‑mac.zip](https://github.com/itlackey/openpalm/releases/latest) | Unzip → drag **OpenPalm.app** to Applications |\n| **Mac (Intel)** | [OpenPalm‑x64‑mac.zip](https://github.com/itlackey/openpalm/releases/latest) | Unzip → drag **OpenPalm.app** to Applications |\n| **Windows** | [OpenPalm‑win.zip](https://github.com/itlackey/openpalm/releases/latest) | Unzip → run **OpenPalm.exe** (portable, no install) |\n| **Linux** | [OpenPalm.AppImage](https://github.com/itlackey/openpalm/releases/latest) | `chmod +x` → run |\n\nOpen the app, follow the setup wizard (it'll confirm Docker is running, ask which AI provider to use, and start the stack), and land directly on the chat page. Done.\n\n\u003e First launch on macOS/Windows: builds are not code-signed, so there's a one-time security prompt. On macOS, **right-click OpenPalm.app → Open** the first time (or `xattr -dr com.apple.quarantine OpenPalm.app`). On Windows, click **More info → Run anyway** on the SmartScreen prompt. Subsequent launches are unrestricted.\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eAdvanced / headless install (CLI)\u003c/strong\u003e\u003c/summary\u003e\n\nFor servers or power users who prefer a CLI:\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/itlackey/openpalm/main/scripts/setup.sh | bash\n```\n\nThis downloads the CLI binary for your platform, seeds `~/.openpalm/`, opens the same wizard in your browser, and starts the stack. See the [setup guide](docs/setup-guide.md) for the full headless flow and the bare-metal `docker compose` path.\n\n\u003c/details\u003e\n\n## Make it yours\n\n- **Swap models** — Point it at OpenAI, Anthropic, Groq, Ollama, LMStudio, or anything OpenAI-compatible.\n- **Add portals** — Enable Discord, Slack, API, or web chat by enabling the relevant addon in your stack.\n- **Extend the assistant** — Drop in OpenCode plugins, custom tools, or let the assistant find what they need with built-in [AKM](https://github.com/itlackey/akm) support.\n- **Schedule automations** — Add YAML files to run recurring tasks on a cron schedule.\n- **Protect your secrets** — Built-in log redactor masks token/secret/key/password/HMAC values from every service log; `openpalm scan` lists which sensitive slots are populated in your env files.\n\n## How it works\n\n\u003cdiv\u003e\n\u003cimg src=\"packages/ui/static/fu-128.png\" alt=\"OpenPalm\" width=\"90\" style=\"float: right; shape-margin: 0.25rem;\" /\u003e\n\u003cp\u003eClients talk to portals or guardian-hosted ingress surfaces. Portals authenticate to the guardian, the guardian validates and forwards to the assistant, and the assistant does the work. That's it.\u003c/p\u003e\n\u003c/div\u003e\n\n![Architecture](docs/technical/architecture.svg)\n\nFor the full walkthrough, see [How It Works](docs/how-it-works.md). For security invariants and architectural rules, see [Core Principles](docs/technical/core-principles.md).\n\n## Documentation\n\n| Guide | What's inside |\n|---|---|\n| [Setup Guide](docs/setup-guide.md) | Install, update, and troubleshoot |\n| [Upgrade 0.10.x → 0.11.0](docs/operations/upgrade-0.10-to-0.11.md) | Upgrade an existing install: file/env/port migration |\n| [How It Works](docs/how-it-works.md) | Architecture and data flow |\n| [Managing OpenPalm](docs/managing-openpalm.md) | Config, addons, secrets, automations |\n| [Core Principles](docs/technical/core-principles.md) | Security invariants and design rules |\n| [Community Portals](docs/portals/community-portals.md) | Build your own guardian-facing portal adapter |\n| [Full docs index](docs/README.md) | Everything else |\n\n## Contributing\n\nOpenPalm is open source under [MPL-2.0](LICENSE). Contributions are welcome — just know that things move fast right now and the architecture is still settling. Check out the [docs index](docs/README.md) to get oriented, and don't hesitate to open an issue if something breaks or doesn't make sense.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fitlackey%2Fopenpalm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fitlackey%2Fopenpalm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fitlackey%2Fopenpalm/lists"}