junhost
v5.0.2
Published
Jun — a self-hosted dashboard that runs and supervises Codex as a 24/7 local/VPS agent: chat runs, workspace files, skills, MCP, schedules.
Maintainers
Readme
Jun
Self-hosted dashboard that runs and supervises Codex as a 24/7 agent on your own machine or VPS.
- Chat runs — full Codex conversations with live streaming, reasoning, tool cards, approvals, steering, models/effort/sandbox per conversation
- Workspaces — multiple isolated project workspaces with a file tree, editor, and previews
- Remote browser — watch the agent browse in a live viewport, take manual control, WAF-resistant stealth engine, proxy support
- Skills — create, edit, and test agent skills; install from the skills.sh registry
- MCP — manage MCP servers from the UI; Jun ships its own MCP server so the agent can manage itself
- Schedules — cron or one-off automated runs, unattended approval mode
- Memories — Codex's native memory feature, surfaced and editable
Requirements
Install
bun install -g junhost
jun startOpen http://127.0.0.1:8787. Sign in to Codex from the Settings page (device-code flow works on headless servers).
jun doctor # check prerequisites
jun helpWhere things live
All state is in ~/.jun (override with JUN_HOME): projects/workspaces, run history (JSONL), schedules, config. The daemon binds 127.0.0.1 by default (override JUN_HOST/JUN_PORT) — for quick remote access, tunnel: ssh -L 8787:127.0.0.1:8787 user@host.
Run on a VPS (Debian/Ubuntu)
# Bun + Codex CLI
curl -fsSL https://bun.sh/install | bash && export PATH="$HOME/.bun/bin:$PATH"
npm install -g @openai/codex
# Chromium system libs — required, or the stealth browser engine can't launch
# and sites behind edge WAFs will block the agent. (libasound2 on Ubuntu <24.04.)
apt-get update && apt-get install -y \
libnss3 libatk1.0-0 libatk-bridge2.0-0 libcups2 libgbm1 libdrm2 \
libxkbcommon0 libxcomposite1 libxdamage1 libxfixes3 libxrandr2 \
libpango-1.0-0 libcairo2 libxshmfence1 libasound2t64
bun install -g junhost && jun doctorRun it as a systemd service — /etc/systemd/system/jun.service:
[Unit]
Description=Jun
After=network-online.target
Wants=network-online.target
[Service]
Environment=JUN_HOME=/var/lib/jun
Environment=PATH=/root/.bun/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ExecStart=/root/.bun/bin/bun /root/.bun/bin/jun start
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.targetsystemctl daemon-reload && systemctl enable --now junTo reach the dashboard, either SSH-tunnel, or put Caddy in front for HTTPS (reverse_proxy 127.0.0.1:8787 — WebSockets work automatically; add basic_auth, since Jun has no built-in login yet). Sign in to Codex from Settings — the device-code flow works headless. If the box has a datacenter IP, set a residential browser proxy in Settings → Browser proxy (or JUN_BROWSER_PROXY=http://user:pass@host:port; in a systemd drop-in use raw %-free credentials — % is a systemd escape). Upgrade anytime: jun upgrade && systemctl restart jun.
License
Proprietary — all rights reserved. Free to install and use; the source is not open.
