Self-hosted AI workspace.
Find a file
nopoz f88e2d1f7f
Merge commit from fork
* fix(security): stop API tokens reaching privileged agent tools

A bearer API token resolves to the human who minted it, and minting is admin-only, so every owner-keyed privilege check in the agent path answers "admin". A token issued for a narrow integration therefore reached bash and python with the authority of the account that created it.

Three independent routes to that sink, each closed here.

The token could answer its own tool-approval prompt. An approval records that a person authorized one dangerous action, and a token cannot make that statement, so /api/chat_stream now refuses an approval resume from a bearer caller.

The chat-session grant was reconstructable from caller-supplied message metadata. Two routes persist a metadata blob on the caller's behalf, so the shape of a resolved approval card could be written straight into a transcript and was then read back as authority. The server now signs the grant when it resolves an approval and verifies that signature when reading it back, binding it to the chat and the approval it was issued for. Both routes also drop server-owned keys from an inbound blob.

A run driven by a token inherited its owner's tool set. Such a run is now capped at the non-admin policy regardless of who minted the credential, which holds even where no approval is raised at all.

The human path is unchanged: a browser session still receives the prompt, still approves, and a granted chat-session scope still carries to later turns in that chat.

Scope enforcement across the wider route surface is a separate gap and is not addressed here.

* fix scoped chat delegation boundaries

* fix(auth): reject malformed chat approval signatures

---------

Co-authored-by: RaresKeY <158580472+RaresKeY@users.noreply.github.com>
2026-09-05 19:20:49 +02:00
.github refactor(docs): separate Pages site source (#6176) 2026-08-27 10:20:36 +02:00
assets/branding refactor(docs): separate Pages site source (#6176) 2026-08-27 10:20:36 +02:00
companion fix(companion): honor configured pairing address (#6060) 2026-08-15 21:11:10 +02:00
config/searxng Generate SearXNG secret on first boot 2026-06-01 11:03:02 +09:00
core Merge commit from fork 2026-09-05 19:20:49 +02:00
docker fix(docker): repair app cache parent ownership (#6158) 2026-09-05 18:05:38 +02:00
integrations Add Codex and Claude document draft integration 2026-06-09 14:27:53 +09:00
licenses perf(static): vendor KaTeX and Mermaid, and load them on first use (#5994) 2026-08-16 22:43:12 +01:00
mcp_servers refactor(model-routing): centralize explicit foreground fallback policy (#6020) 2026-08-14 08:10:30 +01:00
routes Merge commit from fork 2026-09-05 19:20:49 +02:00
scripts refactor(docs): separate Pages site source (#6176) 2026-08-27 10:20:36 +02:00
services fix(docs): map live VectorRAG result shapes (#5960) 2026-08-17 00:07:12 +01:00
specs docs: bootstrap specs ground truth (#5794) 2026-08-25 14:18:44 +02:00
src Merge commit from fork 2026-09-05 19:20:49 +02:00
static fix(agent): allow remaining actions for an approved task (#6113) 2026-08-19 08:01:34 -06:00
swift/odysseus-mlx-image-bridge Merge verified Odysseus fixes 2026-07-23 14:49:02 +00:00
tests Merge commit from fork 2026-09-05 19:20:49 +02:00
website refactor(docs): separate Pages site source (#6176) 2026-08-27 10:20:36 +02:00
.dockerignore refactor(docs): separate Pages site source (#6176) 2026-08-27 10:20:36 +02:00
.env.example fix(auth): derive the session cookie Secure flag from the request scheme (#6048) 2026-08-16 22:56:36 +01:00
.gitattributes perf(static): vendor KaTeX and Mermaid, and load them on first use (#5994) 2026-08-16 22:43:12 +01:00
.gitignore refactor(docs): separate Pages site source (#6176) 2026-08-27 10:20:36 +02:00
ACKNOWLEDGMENTS.md perf(static): vendor KaTeX and Mermaid, and load them on first use (#5994) 2026-08-16 22:43:12 +01:00
app.py Merge pull request #6081 from ydonghao/refactor/routes-task-to-subdir 2026-08-16 22:29:43 -06:00
build-macos-app.sh refactor(docs): separate Pages site source (#6176) 2026-08-27 10:20:36 +02:00
build-windows-portable.ps1 feat(launcher): add portable windows launcher (#976) 2026-06-16 04:58:16 +01:00
CONTRIBUTING.md chore: update repository URLs after organization transfer (#5622) 2026-07-20 16:43:47 +02:00
docker-compose.gpu-amd.yml fix(auth): derive the session cookie Secure flag from the request scheme (#6048) 2026-08-16 22:56:36 +01:00
docker-compose.gpu-nvidia.yml fix(auth): derive the session cookie Secure flag from the request scheme (#6048) 2026-08-16 22:56:36 +01:00
docker-compose.yml fix(auth): derive the session cookie Secure flag from the request scheme (#6048) 2026-08-16 22:56:36 +01:00
Dockerfile Merge verified Odysseus fixes 2026-07-23 14:49:02 +00:00
install-service.sh Odysseus v1.0 2026-05-31 23:58:26 +09:00
launch-windows.ps1 fix(mcp): stop assuming http://localhost:7000 for the OAuth callback (#6032) 2026-08-15 23:09:01 -06:00
launcher.py feat(launcher): add portable windows launcher (#976) 2026-06-16 04:58:16 +01:00
LICENSE chore: backport main-only changes to dev AGPL relicense + Cookbook serve fix (#3704) 2026-06-09 23:20:34 +02:00
odysseus-ui.service fix: systemd service should serve on port 7000 to match Docker/setup/README (#1297) 2026-06-03 02:04:37 +09:00
Odysseus.spec feat(launcher): add portable windows launcher (#976) 2026-06-16 04:58:16 +01:00
package-lock.json build(deps-dev): bump @antithesishq/bombadil (#6026) 2026-08-25 14:03:11 +02:00
package.json build(deps-dev): bump @antithesishq/bombadil (#6026) 2026-08-25 14:03:11 +02:00
pyproject.toml test: add fast lane and duration visibility (#3659) 2026-06-09 20:11:47 +02:00
README.md refactor(docs): separate Pages site source (#6176) 2026-08-27 10:20:36 +02:00
requirements-optional.txt fix(speech): define the Kokoro optional install contract (#5962) 2026-08-16 23:39:12 +01:00
requirements.txt fix(deps): switch psycopg2 to psycopg2-binary (#5937) 2026-09-01 17:49:21 +02:00
ROADMAP.md Merge verified Odysseus fixes 2026-07-23 14:49:02 +00:00
SECURITY.md fix(auth): derive the session cookie Secure flag from the request scheme (#6048) 2026-08-16 22:56:36 +01:00
setup.py fix(setup): load .env so a pre-seeded admin password is honored on native installs (#4787) 2026-06-23 20:08:05 +02:00
start-macos.sh fix(mcp): stop assuming http://localhost:7000 for the OAuth callback (#6032) 2026-08-15 23:09:01 -06:00
THREAT_MODEL.md feat(auth): define Default/Local owner contract (#5795) 2026-08-15 20:27:26 +01:00
update_windows.bat Windows: add Docker update script 2026-06-02 20:45:32 +09:00

Odysseus

A self-hosted AI workspace for chat, agents, research, documents, email, notes, calendar, and local model workflows.

Quick Start · Setup Guide · Contributing · Roadmap

Packaging status

Odysseus interface


Quick Start

dev is the default branch and gets the newest changes first. Use main if you want the more curated branch.

git clone https://github.com/odysseus-dev/odysseus.git
cd odysseus
cp .env.example .env
docker compose up -d --build

Open http://localhost:7000 when the containers are healthy. The first admin password is printed in docker compose logs odysseus.

Native installs, GPU notes, Windows/macOS instructions, HTTPS, and configuration live in the setup guide.

Features

  • Chat + Agents — local/API models, tools, MCP, files, shell, skills, and memory.
  • Cookbook — hardware-aware model recommendations, downloads, and serving.
  • Deep Research — multi-step web research with source reading and report generation.
  • Compare — blind side-by-side model testing and synthesis.
  • Documents — writing-first editor with AI edits, suggestions, Markdown, HTML, CSV, and syntax highlighting.
  • Email — IMAP/SMTP inbox with triage, tags, summaries, reminders, and reply drafts.
  • Notes, Tasks + Calendar — reminders, todos, scheduled agent tasks, and CalDAV sync.
  • Extras — gallery/image editor, themes, uploads, web search, presets, sessions, and 2FA.

Demo

A full hover-to-play tour lives on the Odysseus landing page. Its source lives under website/.

Contributing

Help is welcome. The best entry points are fresh-install testing, provider setup bugs, mobile/editor polish, docs, and small focused refactors. See CONTRIBUTING.md and ROADMAP.md.

Security

Odysseus is a self-hosted workspace with powerful local tools. Keep auth enabled, keep private data out of Git, and do not expose raw model/service ports publicly.

  • Keep AUTH_ENABLED=true for any network-accessible deployment.
  • Keep LOCALHOST_BYPASS=false outside local development.

Deployment details are in the setup guide.

Star History

Star History Chart

License

AGPL-3.0-or-later -- see LICENSE and ACKNOWLEDGMENTS.md.