You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
skills/ — Claude Code skill definitions (mounted into ephemeral containers)
25
26
infra/
26
-
docker/ — Dockerfiles (api, web)
27
+
docker/ — Dockerfiles (api, web, claude-runner)
27
28
coolify/ — production docker-compose
28
29
```
29
30
31
+
## How It Works
32
+
33
+
1. GitHub PR event hits the webhook receiver
34
+
2. API posts a PR comment with a session link
35
+
3. User clicks the link (or auto-trigger if configured)
36
+
4. Backend spins up an ephemeral Docker container with Claude Code CLI
37
+
5. Container runs the assigned skill against the PR (using `gh` CLI for fast checkout)
38
+
6. Results stream back via SSE passthrough to the frontend
39
+
7. Container is destroyed after completion or timeout
40
+
41
+
**Key**: Users provide their Claude credentials once in the admin panel (BYOK). The backend never calls the Claude API directly -- containers use the credentials natively via Claude Code CLI.
42
+
30
43
## Key Patterns
31
44
32
45
-**App factory**: `helprs.main:create_app()` — lifespan manages DB engine
-`FERNET_KEY` — encryption key for stored credentials
65
88
66
89
## Gotchas
67
90
68
91
- Always run `make lint` before pushing — ruff + eslint must pass
69
92
- DB migrations: `make migrate` inside Docker, or `cd apps/api && uv run alembic upgrade head` locally
70
93
- Test conftest **must** set env vars before importing from `helprs.*`
94
+
-**Agent-readiness**: This repo must be fully understandable by a fresh Claude Code instance with no prior context. Keep docs and CLAUDE.md accurate.
95
+
-**Worktree merges**: Always `git stash --include-untracked` before merging worktree branches into main — uncommitted local changes cause modify/delete conflicts
96
+
97
+
## Key Decisions
98
+
99
+
-**Pre-pivot code**: preserved on branch `pre-pivot/v1`
100
+
-**No pydantic-ai**: AI orchestration handled by Claude Code CLI in containers, not Python agent code
101
+
-**BYOK via admin**: credentials stored once per user, injected as ephemeral env vars into containers
102
+
-**Open source target**: designed for self-hosting with own Claude licenses
0 commit comments