2026-05-29 11:06:08 +02:00
|
|
|
|
# Forgejo SSH Setup for Agents
|
|
|
|
|
|
|
|
|
|
|
|
Primary git remote: `code.smilepowered.org` (Forgejo 10.0.3, SSH port 2222).
|
|
|
|
|
|
|
|
|
|
|
|
Each agent host gets its own machine user and SSH key. No shared credentials.
|
|
|
|
|
|
|
|
|
|
|
|
## On a new agent host
|
|
|
|
|
|
|
|
|
|
|
|
### 1. Generate a host-specific SSH key
|
|
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
|
ssh-keygen -t ed25519 -f ~/.ssh/forgejo-<username> -C "<username>"
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
Replace `<username>` with the machine user assigned to this host:
|
|
|
|
|
|
- debby → `hermes-debby`
|
|
|
|
|
|
- domedog → `claude-domedog`
|
|
|
|
|
|
- osa → `codex-osa`
|
|
|
|
|
|
|
|
|
|
|
|
### 2. Add Forgejo SSH config
|
|
|
|
|
|
|
|
|
|
|
|
```ssh-config
|
|
|
|
|
|
Host code.smilepowered.org
|
|
|
|
|
|
HostName code.smilepowered.org
|
|
|
|
|
|
User git
|
|
|
|
|
|
Port 2222
|
|
|
|
|
|
IdentityFile ~/.ssh/forgejo-<username>
|
|
|
|
|
|
IdentitiesOnly yes
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 3. Have the operator register your public key
|
|
|
|
|
|
|
|
|
|
|
|
Send the output of `cat ~/.ssh/forgejo-<username>.pub` to the operator (Samo
|
|
|
|
|
|
or Hermes on debby). They will register it under your machine user on Forgejo.
|
|
|
|
|
|
|
|
|
|
|
|
### 4. Verify
|
|
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
|
ssh -T git@code.smilepowered.org
|
|
|
|
|
|
# Expected: "Hi there, <username>! You've successfully authenticated..."
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 5. Clone or add remote
|
|
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
|
# Fresh clone
|
|
|
|
|
|
git clone git@code.smilepowered.org:clawdie/<repo>.git
|
|
|
|
|
|
|
|
|
|
|
|
# Add remote to existing checkout
|
|
|
|
|
|
git remote add forgejo git@code.smilepowered.org:clawdie/<repo>.git
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## Repos
|
|
|
|
|
|
|
|
|
|
|
|
| Repo | SSH URL |
|
|
|
|
|
|
|------|---------|
|
|
|
|
|
|
| clawdie-ai | `git@code.smilepowered.org:clawdie/clawdie-ai.git` |
|
|
|
|
|
|
| clawdie-iso | `git@code.smilepowered.org:clawdie/clawdie-iso.git` |
|
|
|
|
|
|
| colibri | `git@code.smilepowered.org:clawdie/colibri.git` |
|
|
|
|
|
|
|
|
|
|
|
|
## Permissions
|
|
|
|
|
|
|
|
|
|
|
|
| Host | User | Permissions |
|
|
|
|
|
|
|------|------|------------|
|
|
|
|
|
|
| debby | hermes-debby | write (all three) |
|
|
|
|
|
|
| domedog | claude-domedog | write (all three) |
|
2026-05-29 11:29:10 +02:00
|
|
|
|
| osa | codex-osa | write (all three) |
|
2026-05-29 12:40:55 +00:00
|
|
|
|
| smilepowered.org | opus-smilepowered | write (all three) |
|
2026-05-29 11:06:08 +02:00
|
|
|
|
|
2026-05-29 11:09:19 +02:00
|
|
|
|
## Agent readiness checklist
|
|
|
|
|
|
|
|
|
|
|
|
Agents update their own row after testing from the named host. Use ✅ only for
|
|
|
|
|
|
proof captured on that host; use ⏳ for pending work and N/A when intentionally
|
|
|
|
|
|
not applicable.
|
|
|
|
|
|
|
|
|
|
|
|
| Host | User | Key generated on host | Key registered on user | SSH auth verified | Repo read verified | Push verified | Last proof |
|
|
|
|
|
|
|------|------|-----------------------|------------------------|-------------------|--------------------|---------------|------------|
|
|
|
|
|
|
| debby | hermes-debby | ⏳ | ⏳ | ⏳ | ⏳ | ⏳ | pending Hermes self-check |
|
|
|
|
|
|
| domedog | claude-domedog | ⏳ | ⏳ | ⏳ | ⏳ | ⏳ | pending Claude self-check |
|
|
|
|
|
|
| osa | codex-osa | ✅ | ✅ | ✅ | ✅ all three repos | ✅ all three repos | 2026-05-29: `ssh -T` identified `codex-osa`; `git ls-remote` succeeded for all repos; scratch branch push/delete succeeded for `colibri`, `clawdie-ai`, `clawdie-iso` |
|
2026-05-29 12:40:55 +00:00
|
|
|
|
| smilepowered.org | opus-smilepowered | ✅ | ✅ | ✅ | ✅ all three repos | ✅ all three repos | 2026-05-29: `ssh -T` identified `opus-smilepowered`; cloned all three repos; scratch branch push/delete succeeded for `colibri`, `clawdie-ai`, `clawdie-iso` |
|
2026-05-29 11:09:19 +02:00
|
|
|
|
|
|
|
|
|
|
## Forgejo cutover checklist
|
|
|
|
|
|
|
|
|
|
|
|
| Item | Status | Notes |
|
|
|
|
|
|
|------|--------|-------|
|
|
|
|
|
|
| Organization created | ✅ | `clawdie` on `code.smilepowered.org` |
|
|
|
|
|
|
| Repos imported | ✅ | `clawdie-ai`, `clawdie-iso`, `colibri` |
|
|
|
|
|
|
| Clean ISO history published | ✅ | `clawdie-iso` main includes Colibri ISO staging (`ef28677`) |
|
|
|
|
|
|
| Machine users created | ✅ | `hermes-debby`, `claude-domedog`, `codex-osa` |
|
2026-05-29 13:47:30 +02:00
|
|
|
|
| Per-host SSH keys | ✅ | `hermes-debby`, `claude-domedog`, and `codex-osa` have per-host keys; no shared private keys |
|
|
|
|
|
|
| Bootstrap/admin tokens deleted | ⏳ | Admin token retained briefly for stabilization; delete within 1–2 days |
|
|
|
|
|
|
| Branch protection | ✅ | Direct pushes to `main` rejected on all three repos; `clawdie-iso/xfce-operator-usb` also protected while live |
|
|
|
|
|
|
| Vaultwarden secrets | ✅ | `vault.smilepowered.org` has `agent-secrets` collection for operator-managed secrets |
|
2026-05-29 11:09:19 +02:00
|
|
|
|
| Webhook validation | ⏳ | Planned: Forgejo push → OSA FreeBSD proof gate |
|
|
|
|
|
|
|
2026-05-29 11:06:08 +02:00
|
|
|
|
## Rules
|
|
|
|
|
|
|
|
|
|
|
|
- Never copy or share SSH private keys between hosts.
|
|
|
|
|
|
- Codeberg is the public mirror — do not push to it. Push to Forgejo.
|
|
|
|
|
|
- See `AGENTS.md#forgejo-primary-git-remote` for the full permissions table.
|