Skip to content

Commit 1b636c2

Browse files
authored
chore: prep repo for public release (#56)
- ignore internal redesign artifacts (redisign/, frontend-redesign.md, qa-frontend-agent.md) - annotate test-only FERNET_KEY in CI workflow - add hardware sizing table to self-hosting guide - add SECURITY.md (private vulnerability reporting via GitHub advisories) - add issue templates (bug, feature) + config redirecting security and setup questions - README: MIT/status badges, alpha status section, BYOK cost note, link to SECURITY.md
1 parent 396ad34 commit 1b636c2

8 files changed

Lines changed: 159 additions & 1 deletion

File tree

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
---
2+
name: Bug report
3+
about: Something isn't working
4+
title: ''
5+
labels: bug
6+
assignees: ''
7+
---
8+
9+
## What happened
10+
11+
<!-- A clear description of the bug. What did you expect, what did you observe? -->
12+
13+
## Reproduction
14+
15+
1.
16+
2.
17+
3.
18+
19+
## Environment
20+
21+
- helPRs version / commit:
22+
- Deployment: <!-- docker-compose / Coolify / other -->
23+
- Host OS:
24+
- Browser (if frontend issue):
25+
26+
## Logs
27+
28+
<!--
29+
Relevant excerpts. For API issues:
30+
docker compose logs api | tail -100
31+
32+
For a specific runner container:
33+
docker logs <container-id>
34+
35+
Please scrub tokens, webhook secrets, and the Fernet key before pasting.
36+
-->
37+
38+
```
39+
paste here
40+
```
41+
42+
## Anything else
43+
44+
<!-- Workarounds you tried, hypotheses, screenshots. -->

.github/ISSUE_TEMPLATE/config.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
blank_issues_enabled: false
2+
contact_links:
3+
- name: Security vulnerability
4+
url: https://github.com/mariuspruvot/helprs/security/advisories/new
5+
about: Please report security issues privately, not as a public issue. See SECURITY.md.
6+
- name: Self-hosting question
7+
url: https://github.com/mariuspruvot/helprs/blob/main/docs/self-hosting.md
8+
about: Most setup questions are answered in the self-hosting guide.
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
---
2+
name: Feature request
3+
about: Propose an enhancement or a new skill
4+
title: ''
5+
labels: enhancement
6+
assignees: ''
7+
---
8+
9+
## Problem
10+
11+
<!-- What problem are you trying to solve, or what is missing today? -->
12+
13+
## Proposed solution
14+
15+
<!-- What you'd like helPRs to do. If this is a new skill, link to or paste the skill prompt sketch. -->
16+
17+
## Alternatives considered
18+
19+
<!-- Other approaches you thought about. Why are they worse? -->
20+
21+
## Additional context
22+
23+
<!-- Use case, screenshots, links to similar tools. -->

.github/workflows/ci.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ jobs:
4545
- run: uv sync --frozen
4646
- run: uv run pytest --cov=helprs --cov-report=term-missing --cov-fail-under=70
4747
env:
48+
# Test-only values. The ephemeral CI database is destroyed after each run
49+
# and nothing it encrypts ever leaves the job. Do not reuse anywhere else.
4850
DATABASE_URL: postgresql+asyncpg://helprs:helprs@localhost:5432/helprs_test
4951
SECRET_KEY: ci-test-secret-key
5052
FERNET_KEY: "-fB7lL74GHGbXnRClRQTaBP9_flqSUHFC9_c2n3Tvbo="

.gitignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,3 +53,8 @@ apps/api/alembic/versions/*.pyc
5353
_bmad/
5454
_bmad-output/
5555
.claude/
56+
57+
# Internal redesign artifacts & dev-only scratchpads (kept locally, not in public repo)
58+
redisign/
59+
docs/frontend-redesign.md
60+
scripts/qa-frontend-agent.md

README.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
11
# helPRs
22

33
[![CI](https://github.com/mariuspruvot/helprs/actions/workflows/ci.yml/badge.svg)](https://github.com/mariuspruvot/helprs/actions/workflows/ci.yml)
4+
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
5+
[![Status: alpha](https://img.shields.io/badge/status-alpha-orange.svg)](#status)
46

57
**Pluggable AI skill runner for pull requests.**
68

79
helPRs spins up ephemeral Docker containers running [Claude Code](https://docs.anthropic.com/en/docs/claude-code) to execute skills against your PRs -- comprehension quizzes, code reviews, security audits -- and streams results back in real time.
810

9-
BYOK (Bring Your Own Key): you provide your Claude credentials once. The backend never calls the Claude API -- containers use your credentials natively.
11+
BYOK (Bring Your Own Key): you provide your Claude credentials once. The backend never calls the Claude API -- containers use your credentials natively. Costs are billed to your Claude subscription (or Anthropic API account if you use an API key instead).
12+
13+
## Status
14+
15+
helPRs is **alpha**. The architecture is stable, the core flows work end-to-end, but the API and skill spec may still break between releases. Self-hosting is supported and documented -- see the [self-hosting guide](docs/self-hosting.md) for hardware requirements and step-by-step setup.
1016

1117
---
1218

@@ -108,6 +114,7 @@ For the full picture, see:
108114
| [Creating Skills](docs/creating-skills.md) | Skill authors | Build custom skills |
109115
| [Skill Specification](skills/SKILL_SPEC.md) | Skill authors | Formal spec for skill definitions |
110116
| [Contributing](CONTRIBUTING.md) | Contributors | Dev setup, code style, PR process |
117+
| [Security policy](SECURITY.md) | Everyone | Reporting vulnerabilities |
111118
| [ADR-001](docs/adr-001-claude-code-container-pivot.md) | Everyone | Why ephemeral containers |
112119

113120
---

SECURITY.md

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# Security Policy
2+
3+
## Supported versions
4+
5+
helPRs is in early development. Only the `main` branch receives security fixes. There is no LTS line.
6+
7+
## Reporting a vulnerability
8+
9+
**Please do not file public GitHub issues for security problems.**
10+
11+
Use GitHub's private vulnerability reporting:
12+
13+
1. Go to [the Security tab of the repository](https://github.com/mariuspruvot/helprs/security)
14+
2. Click **Report a vulnerability**
15+
3. Fill in the form with as much detail as you can (reproduction, impact, suggested fix)
16+
17+
If you cannot use GitHub for any reason, email **marius.pruvot@outlook.fr** with the subject line `helPRs security:`.
18+
19+
### What to include
20+
21+
- A description of the issue and the version / commit it affects
22+
- Steps to reproduce (proof-of-concept is ideal)
23+
- Your assessment of impact (data disclosure, RCE, auth bypass, etc.)
24+
- Any suggested mitigation
25+
26+
### What to expect
27+
28+
- Acknowledgement within 72 hours
29+
- A first assessment within 7 days
30+
- Coordinated disclosure: a fix will be published before public details, and credit will be given unless you ask otherwise
31+
32+
## Scope
33+
34+
In scope:
35+
36+
- The API (`apps/api/`), the web app (`apps/web/`), and the runner image (`infra/docker/claude-runner/`)
37+
- The default `docker-compose` and Coolify deployment recipes
38+
- Container orchestration (privilege escalation, sandbox escape, credential leaks across sessions)
39+
40+
Out of scope:
41+
42+
- Vulnerabilities in upstream dependencies that have not been disclosed upstream (please report to the upstream first)
43+
- Issues that require an attacker to already have admin / database access
44+
- Social engineering of operators or users
45+
- Anything depending on a misconfigured deployment that the documentation explicitly warns against
46+
47+
## Operator responsibilities
48+
49+
helPRs is self-hosted. As an operator you are responsible for:
50+
51+
- Keeping the host OS, Docker, and the helPRs image up to date
52+
- Protecting the `.env` file, the Postgres volume, and the `FERNET_KEY` (loss of the key means stored Claude credentials cannot be decrypted)
53+
- Restricting access to the `/admin` panel (set a strong `ADMIN_PASSWORD`)
54+
- Terminating TLS at a reverse proxy (helPRs does not serve HTTPS directly)
55+
- Treating the Docker socket mounted into the API container as a privileged surface -- only run helPRs on hosts where that is acceptable

docs/self-hosting.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,20 @@ Deploy helPRs from zero to a running instance. By the end you'll have helPRs con
1111
- A **Claude account** -- you'll generate an OAuth token with `claude setup-token` (or use an Anthropic API key)
1212
- A server with a public URL if you want GitHub webhooks (or use a tunnel like ngrok for local dev)
1313

14+
### Hardware
15+
16+
helPRs itself is lightweight (API + web + Postgres). The real footprint comes from the ephemeral `claude-runner` containers it spawns per session -- each one runs Node + Claude Code CLI, clones the target repo, and holds it in memory for the duration of the skill (typically 5-15 min).
17+
18+
| Profile | vCPU | RAM | Disk | Concurrency |
19+
|---------|------|-----|------|-------------|
20+
| **Minimum** (try it out, 1 user, 1 session at a time) | 2 | 2 GB | 10 GB | 1 |
21+
| **Recommended** (small team, a few concurrent sessions) | 2-4 | 4 GB | 20 GB | 3-5 |
22+
| **Comfortable** (larger team, many parallel PRs) | 4-8 | 8 GB+ | 40 GB+ | 10+ |
23+
24+
Each running `claude-runner` container peaks around 300-600 MB RSS and one core. Plan ~1 GB of RAM headroom per concurrent session you expect, on top of the base ~1 GB used by the API + Postgres + web. Disk usage grows with the size of the repos cloned at runtime (shallow clones, so it's small; cleaned up on container exit).
25+
26+
Runners are killed after `CONTAINER_TTL_SECONDS` (default 15 min). Lower it if your host is tight on RAM.
27+
1428
---
1529

1630
## Step 1: Create a GitHub App

0 commit comments

Comments
 (0)