feat: Claude Agent integration + cookbook reconnect + UI polish
- Claude Agent integration: AGENT_CONFIGS.claude, INTG_TYPES.claude, setup_claude_routes + integrations/claude/ skill bundle. Wired in app.py alongside the existing Codex integration; same scope-gated /api/codex/* backend; agent form has new description so users know it's setup for an external CLI, not an agent streamed inside Odysseus. - Remove mark_email_boundaries action: not good enough yet. Stripped from task UI, scheduler defaults, registry, tool schema, clear-cache route. Added to RETIRED_HOUSEKEEPING_ACTIONS so existing rows + their task_runs auto-purge on startup. - Cookbook download reliability: "Reconnect" fix button in the crash diagnosis runs _reconnectTask after probing has-session. 30s confirm window before marking a download "done" — kills the Finished/Downloading flicker when tmux briefly drops between captures. - Mobile UX: tap anywhere on a note card body opens the editor; Update button morphs to Archive when no text was edited; bell icon accent-colored; chip-trashing notif pills fade so only the icon rotates into the trash zone. - Settings integrations: SVG-per-provider in email + API preset dropdowns, custom drop-up-aware menus, accent sub-header icons (IMAP/SMTP), consistent card styling between list + edit, contacts Edit/Delete icons, agent form description copy.
This commit is contained in:
36
integrations/claude/README.md
Normal file
36
integrations/claude/README.md
Normal file
@@ -0,0 +1,36 @@
|
||||
# Odysseus Claude Code Integration
|
||||
|
||||
This directory contains the Claude Code skill bundle for Odysseus.
|
||||
|
||||
## User Flow
|
||||
|
||||
1. Open Odysseus Settings > Integrations.
|
||||
2. Add a Claude Agent.
|
||||
3. Copy the full setup commands shown after the generated token.
|
||||
4. Toggle the tools Claude is allowed to use.
|
||||
5. Configure the terminal Claude Code session:
|
||||
|
||||
```bash
|
||||
export ODYSSEUS_URL=http://your-odysseus-host:7000
|
||||
export ODYSSEUS_API_TOKEN=ody_generated_token
|
||||
mkdir -p ~/.claude
|
||||
curl -fsSL -H "Authorization: Bearer $ODYSSEUS_API_TOKEN" "$ODYSSEUS_URL/api/claude/plugin.zip" -o /tmp/odysseus-claude-skill.zip
|
||||
python3 -m zipfile -e /tmp/odysseus-claude-skill.zip ~/.claude/
|
||||
```
|
||||
|
||||
Claude Code auto-loads anything under `~/.claude/skills/`, so the `odysseus` skill is
|
||||
available in any session that has `ODYSSEUS_URL` and `ODYSSEUS_API_TOKEN` in its
|
||||
environment.
|
||||
|
||||
## What's in the bundle
|
||||
|
||||
- `skills/odysseus/SKILL.md` — the skill definition Claude Code reads.
|
||||
- `skills/odysseus/scripts/odysseus_api.py` — small helper that calls the scoped
|
||||
`/api/codex/*` endpoints (these are the canonical scope-gated agent API; the
|
||||
`codex` path is historic and shared by all agent integrations).
|
||||
|
||||
## Scope enforcement
|
||||
|
||||
The token is scope-gated. Every tool surface is checked server-side in Odysseus,
|
||||
so even if Claude tries to call a forbidden endpoint, it gets `403` until the
|
||||
user enables the matching toggle in Settings > Integrations > Claude Agent.
|
||||
Reference in New Issue
Block a user