Files
apes/CLAUDE.md
limiteinductive 160bd603e7 spec v2: apply codex critique, add codex-reviewer subagent
- separate DB models from API types (no more "one struct rules all")
- drop utoipa, drop channel membership, drop model from users
- add seq ordering, soft delete, hashed tokens, same-channel reply constraint
- WS auth via first message instead of query param
- reorder stories to vertical slice (conversation model first, deploy early)
- add codex-reviewer subagent for parallel GPT-5.4 reviews
- update critic + ax skills to use codex-reviewer

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 18:40:52 +02:00

3.4 KiB

CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

What This Is

apes is a post-singularity research platform. No SaaS. Everything vibecoded. Self-hosted on GCP.

Research goal: Prove that RL training an LLM on formal games (Game of Life, Chess, Go) transfers to general capabilities/benchmarks.

Team: Benji and Neeraj (the apes). Claude Code agents are first-class collaborators.

Infrastructure

Service URL VM Zone
Gitea git.unslope.com gitea-vm europe-west1-b
Chat (planned) apes.unslope.com TBD europe-west1-b

GCP project: apes-platform Region: europe-west1 DNS: Namecheap (Advanced DNS tab for A records)

Non-Negotiable Rules

  • Apes don't do tasks. Users of this repo are apes. Never ask them to do something you can do yourself. DNS config, API calls, server setup, debugging — handle it. If it requires a browser or a password the ape hasn't shared, explain what you need and why, but never punt work back to the ape when you have the tools to do it.
  • No SaaS. If we can't self-host it, we don't use it.
  • Vibecoded. Humans direct, agents build. Move fast, verify correctness.
  • GCP project is apes-platform. Always pass --project=apes-platform.
  • Region is europe-west1. Zone europe-west1-b unless there's a reason to change.
  • No split brains. If two pieces of code represent the same thing, one must derive from the other. DB models and API types are separate Rust layers, but API types are the single source for the wire format. TypeScript types are generated from API types via ts-rs. SQL migrations are canonical for the DB. Never hand-write a type that can be derived.
  • Rust first. Backend code is Rust. Type safety everywhere. If it compiles, it should work.

Route By Task

Need Load
GCP commands /gcloud skill
Stress-test a decision /critic skill
Audit agent config quality /ax skill

Git (Gitea)

URL: https://git.unslope.com Repo: benji/apes API: https://git.unslope.com/api/v1/

User Role
benji admin
neeraj collaborator
# Clone
git clone https://git.unslope.com/benji/apes.git

# Push (use API token for auth)
# Create token: curl -u user:pass -X POST https://git.unslope.com/api/v1/users/<user>/tokens -H 'Content-Type: application/json' -d '{"name":"cc","scopes":["all"]}'
# Then: git remote set-url origin https://<user>:<token>@git.unslope.com/benji/apes.git

# Create repo via API
curl -u user:pass -X POST https://git.unslope.com/api/v1/user/repos \
  -H 'Content-Type: application/json' -d '{"name":"repo-name"}'

If DNS hasn't propagated, use --resolve git.unslope.com:443:34.78.255.104 for curl or push via IP on port 3000 (open firewall temporarily).

Deployment Pattern

All services run as Docker Compose on GCP Compute Engine VMs behind Caddy (auto HTTPS via Let's Encrypt).

# SSH into a VM
gcloud compute ssh <vm> --zone=europe-west1-b --project=apes-platform

# Manage services
sudo bash -c 'cd /opt/<service> && docker compose up -d'
sudo docker logs <container> --tail 50

Critic Reflex

When something is surprising, contradictory, or your confidence is low, use the /critic skill before proceeding. Good triggers: vibecoded code behaving unexpectedly, multiple valid architectures, research methodology questions.