https://github.com/pewdiepie-archdaemon/odysseus/commit/0517...
Is the person best known for exploiting security vulnerabilities to get into places you'd rather they didn't, and then getting lost and taking forever to get places the ideal namesake for your AI workspace project?
I didn't see it linked from the project; it seems pretty relevant given who he is.
This project does look fun though.
I don't know if that was a motivation for creating this, but it is a reason some people might choose not to use it.
just my 2c
You gotta pick a dude like Sarpedon who just was a swell guy poking holes in greeks with his spear until he gets killed by Patroclus and everyone is sad.
https://www.reddit.com/r/ClaudeAI/comments/1r186gl/my_agent_...
>Claude steals user's API keys then berates user for poor security practices
>Claude (via the subreddit's automod account) shows up in thread and roasts user again
https://github.com/pewdiepie-archdaemon/dionysus/blob/dionys...
where he describes sending an AI generated email response as "the most polite fuck you to someone that they will never know".
The original email asked him sth like "how many parameters does deepseek v3 have" that "he could have easily searched himself".
─────────────────────────────────────────────── ⊹ ࣪ ˖ ૮( ˶ᵔ ᵕ ᵔ˶ )っ Odysseus vers. 1.0 ───────────────────────────────────────────────

A self-hosted AI workspace -- meant to be the self-hosted version of the UI experience you get from ChatGPT and Claude. But with more jank and fun. Running on your own hardware, with your own data -- local-first, privacy-first, and no trojan.
A full, hover-to-play tour lives on the landing page (docs/index.html). A few looks:





Defaults work out of the box — clone, run, configure inside the app.
Open the Settings panel after first login to point Odysseus at your LLM
server, search provider, email account, etc. Only touch .env if you need
to override deployment-level things like AUTH_ENABLED, DATABASE_URL,
or pre-seed ODYSSEUS_ADMIN_PASSWORD (otherwise an initial password is
generated and printed on first boot).
git clone <your-odysseus-repo-url>
cd odysseus
cp .env.example .env # optional, but recommended for explicit defaults
docker compose up -d --build
Compose starts Odysseus, ChromaDB, SearXNG, and ntfy. First run does a full
image build. Open http://localhost:7000 after the containers are healthy.
Cookbook remote servers use an Odysseus-owned SSH key from ./data/ssh
inside Docker. In Cookbook -> Settings -> Servers, generate/copy the
public key and add it to the remote server's ~/.ssh/authorized_keys.
After generating the key, you can also install it from the host with:
ssh-copy-id -i data/ssh/id_ed25519.pub user@server
Cookbook local downloads are stored in ./data/huggingface, mounted as
~/.cache/huggingface inside the Odysseus container.
Useful checks:
docker compose ps
docker compose logs --tail=120 odysseus
docker compose logs odysseus | grep -E 'ChromaDB|MemoryVectorStore|DEGRADED'
docker compose exec odysseus python -c "from services.hwfit.models import get_models; print(len(get_models()))"
Expected vector-memory startup lines in Docker:
ChromaDB connected: chromadb:8000
MemoryVectorStore initialized
The Cookbook model catalog check should print a non-zero count. If it prints
0, rebuild the Odysseus image with docker compose build --no-cache odysseus.
Requirements: Python 3.11+. On Linux/Termux, Cookbook also requires tmux
for background model downloads and serves.
Install system packages first:
# Debian/Ubuntu
sudo apt install tmux
# Arch
sudo pacman -S tmux
# Fedora
sudo dnf install tmux
Then install Odysseus:
git clone <your-odysseus-repo-url>
cd odysseus
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python setup.py # creates data dirs and prints an initial admin password
uvicorn app:app --host 0.0.0.0 --port 7000
git clone <your-odysseus-repo-url>
cd odysseus
python -m venv venv
venv\Scripts\Activate.ps1
pip install -r requirements.txt
python setup.py
uvicorn app:app --host 0.0.0.0 --port 7000
Open http://localhost:7000, log in with the generated admin password,
and configure everything else inside Settings.
Odysseus is a self-hosted workspace with powerful local tools: shell access, file uploads, model downloads, web research, email/calendar integrations, and API tokens. Treat it like an admin console.
AUTH_ENABLED=true for any network-accessible deployment.data/, .env, logs, databases, and uploaded/generated media out of Git. They are ignored by default.data/auth.json after first boot: disable open signup unless you intentionally want it, make only your own account admin, and keep demo/test accounts non-admin.127.0.0.1; bind to 0.0.0.0 only when you intentionally want LAN/reverse-proxy access.git status --short and confirm no private files from .env, data/, logs/, uploads, backups, or local databases are staged.Odysseus serves plain HTTP on its port. That's fine for localhost and trusted LAN/VPN use, but browsers will warn ("Password fields present on an insecure page") and the login + API tokens travel in cleartext. For anything reachable outside your machine — including a Tailscale IP shared with other devices — put a TLS-terminating reverse proxy in front.
Shortest path with Caddy (auto-renews Let's Encrypt certs):
odysseus.example.com {
reverse_proxy localhost:7000
}
For a LAN-only Tailscale deployment, Caddy + tailscale-cert or the built-in MagicDNS HTTPS feature both work. nginx/Traefik configs are similar — proxy localhost:7000, terminate TLS at the proxy. Once that's in place, the browser warning goes away and your login is encrypted.
Help is welcome. The best entry points are fresh-install testing, provider setup bugs, mobile/editor polish, docs, and small focused refactors. See ROADMAP.md for the current help-wanted list.
Most setup is done inside the app with /setup or Settings. Use .env
for deployment-level defaults and secrets you want present before first boot.
Key settings:
| Variable | Default | Description |
|---|---|---|
LLM_HOST |
localhost |
Your LLM server (e.g. llm-host.local:8000) |
LLM_HOSTS |
-- | Comma-separated list for model discovery |
OPENAI_API_KEY |
-- | Optional OpenAI key. Prefer adding providers in the app unless pre-seeding. |
SEARXNG_INSTANCE |
http://localhost:8080 |
SearXNG URL. Docker overrides this to http://searxng:8080. |
AUTH_ENABLED |
true |
Enable/disable login |
LOCALHOST_BYPASS |
false |
Development-only auth bypass for loopback requests. Keep false for shared/network deployments. |
DATABASE_URL |
sqlite:///./data/app.db |
Database connection string |
CHROMADB_HOST |
localhost |
ChromaDB host for vector memory. Docker overrides this to chromadb. |
CHROMADB_PORT |
8100 |
ChromaDB port for manual host runs. Docker overrides this to 8000. |
EMBEDDING_URL |
-- | OpenAI-compatible embeddings endpoint |
Docker Compose includes these by default:
chromadb:8000; from the host it is exposed as localhost:8100.searxng:8080; from the host it is exposed only on 127.0.0.1:8080.localhost:8091.app.py # FastAPI entry point
core/ auth, database, middleware, constants
src/ llm_core, agent_loop, agent_tools, chat_processor, search/
routes/ chat, session, document, memory, model … endpoints
services/ docs, memory, search, hwfit (Cookbook) …
static/ index.html + app.js + style.css + js/ (modular front-end)
docs/ landing page (index.html) + preview clips
All user data lives in data/ (gitignored): app.db (sessions, messages, documents),
memory.json, presets.json, uploads/, personal_docs/, chroma/, settings.json.
MIT -- see LICENSE and ACKNOWLEDGMENTS.md.
|
|||
|||||
| | | |||||||
)_) )_) )_) ~|~
)___))___))___)\ |
)____)____)_____)\\|
_____|____|____|_____\\\__
\ /
~^~^~~^~^~~^~^~~^~^~~^~^~~^~^~~^~^~~^~^~
~^~ all aboard! ~^~
~^~^~~^~^~~^~^~~^~^~~^~^~~^~^~~^~^~~^~^~
I think it demonstrates how overuse of LLMs for brainstorming/planning and building destroys creativity. That zeitgeist changes from month to month, but when a vibe coded "AI Native" project gets released you'll always see dozens of people in the replies talking about the identical project they've also built or are working on.
I also notice this in my own work, the people who have most eaten the LLM brainworm will come to me asking for us to build the same projects. They all eventually converge to wanting some sort of power user app (like this) that can just do everything because AI is magic to them and there's no reason why it can't do everything.
I hate Peter Thiel but he has that famous quote form years ago where he says not to build the obvious thing because the obvious thing isn't special, so maybe this has always been a phenomenon.
Like I found a really cool project a few weeks ago that I started using and even made a few QoL changes to. Then I thought of the many other changes I wanted, and that the project was written in a language I'm not familiar with (Rust), and I started a port in what I know well (Python) so that I'll be able to actually review the code if needed and generally make better architectural decisions.