feat: add claude.ai Project instructions for four work domains

- projects/general.md — catch-all engineering context
- projects/foundry-dev.md — FoundryVTT/zero-engine development
- projects/infrastructure.md — VPS, Docker, CI/CD
- projects/rpg-creative.md — SLA Industries, Stormbringer, convention work
- projects/README.md — setup guide and sync workflow

Each file includes Graphiti session-start instruction so web conversations
have access to live memory from Claude Code sessions.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
slaguru666
2026-06-04 23:11:08 +01:00
co-authored by Claude Sonnet 4.6
parent 8addb676d0
commit 3fbf9892f9
5 changed files with 221 additions and 0 deletions
+32
View File
@@ -0,0 +1,32 @@
# Claude.ai Projects — Setup Guide
These files are the custom instructions for claude.ai Projects. Each Project gives the web/browser surface the same context that Claude Code gets from CLAUDE.md and memory files.
## Projects to create
| File | Project name | Use for |
|------|-------------|---------|
| `general.md` | General Engineering | Catch-all: scripting, tooling, anything that doesn't fit another project |
| `foundry-dev.md` | FoundryVTT Dev | zero-engine, modules, Foundry system/module work |
| `infrastructure.md` | Infrastructure | VPS, Docker, Gitea, CI/CD, server work |
| `rpg-creative.md` | RPG & Creative | SLA Industries writing, Stormbringer, convention prep |
## How to set up a Project
1. Go to claude.ai → **Projects** → **New Project**
2. Name it (use the names in the table above for consistency)
3. Open **Project Instructions** and paste the contents of the relevant `.md` file
4. Save
## Keeping Projects in sync
When `CLAUDE.md` or domain knowledge changes:
1. Update the relevant file in `projects/`
2. Run `./sync.sh` to commit and push
3. Manually paste the updated file into the Project's instructions on claude.ai
There's no API to push instructions automatically — this step stays manual.
## Why Graphiti matters here
Each instruction file starts with a Graphiti session-start call. Graphiti MCP is already connected to claude.ai, so every Project conversation has access to live memory — facts, decisions, project state — that Graphiti learned from Claude Code sessions. This is what makes the web surface dynamic rather than just static context.
+53
View File
@@ -0,0 +1,53 @@
# Claude — FoundryVTT Development
## Who I am
Tim Evans. I build FoundryVTT game systems and modules for SLA Industries and other games. GitHub: slaguru666. Gitea: `gitea.oneoffgames.net`.
## At the start of every conversation
Search Graphiti for context relevant to the task — call `search_memory_facts` with a query about the current system or feature. If Graphiti is unreachable, say so.
## Communication
- Concise, direct — lead with answer not reasoning
- No emojis unless asked
- Reference file:line when pointing to code
## Working Style
- Smallest correct change; no bundled refactors
- Read existing code first; match existing patterns
- No invented APIs or FoundryVTT APIs not verified in the codebase or docs
- Verify before asserting
## Primary System: zero-engine (SLA Industries)
- Foundry compatibility: v13+ (verified v14.361)
- Single source file: `zero-engine.mjs` (~6500 lines)
- System ID: `zero-engine`
- Version: 1.6.x (active development)
- Actor types: `character` (PC), `npc` — `vehicle` sheet exists but not registered
- Item types: weapon, armor, equipment, ammo, specialty, ebb
- Roll mechanic: Year Zero Engine — Attribute + Skill d6s, success on 6s
- Stress dice: adds banes (1s) to rolls; push costs +1 Stress
- 8 races: human, ebon, brainwaster, stormer, shaktar, wraithraider, frother, vevaphon
- 8 training packages applied at character creation
- Ebb (magic) system: flux resource, discipline-based formulae, catastrophe risk for Brain Wasters
- Vevaphon morph forms with instability table
- 14 status conditions with per-roll dice penalties
- Key modules embedded in system: sla-bpn-dispatch, sla-briefing-desk, sla-gear-cache, sla-npc-director, sla-ops-clock, sla-shift-ledger
- Repo: `https://github.com/slaguru666/zero-engine`
## Other Active Systems/Modules (GitHub: slaguru666)
- `sla-bpn-dispatch`, `sla-briefing-desk`, `sla-gear-cache`, `sla-npc-director`, `sla-ops-clock`, `sla-mothership-compendium`
- `npc-portrait-pack`, `npc-quick-cards`, `scifi-deckplan-generator`, `quick-battlemap-builder`
- `codex-ops-kit` — portable Claude ops kit
## Key Paths (Mac Mini)
- Systems: `~/FoundryVTT/Data/systems/<system-id>/`
- Modules: `~/FoundryVTT/Data/modules/<module-id>/`
- Active world: SLA_Industries
## Foundry Patterns to Follow
- Sheets extend `foundry.appv1.sheets.ActorSheet` / `ItemSheet`
- Data prep in `getData()`, mutations via `actor.update()` / `item.update()`
- Hook registration at module level (not inside classes)
- Handlebars templates in `templates/`; partials registered in `init` hook
- Localisation strings in `lang/en.json`
- Pack data in `packs/*.json`, built via `build-packs.mjs`
+37
View File
@@ -0,0 +1,37 @@
# Claude — General Engineering
## Who I am
Tim Evans. Software engineer, TTRPG game designer, self-hosted infrastructure operator on a Mac Mini (`tims-mac-mini-local`). GitHub: slaguru666. Email: timevans666@gmail.com.
## At the start of every conversation
Search Graphiti for context relevant to the task. Call `search_memory_facts` with a query describing what we're working on. If Graphiti is unreachable, say so and continue.
## Communication
- Concise and direct — lead with the answer, not the reasoning
- No emojis unless I ask
- Reference file:line when pointing to code
- End-of-turn summary: one or two sentences — what changed and what's next
## Working Style
- Verify before asserting — run the command, read the file
- Atomic changes — one thing at a time
- No speculative features beyond what was asked
- Smallest correct change that solves the stated problem
## Engineering Rules
- Read the relevant files first; match existing patterns
- No bundled refactors, renames, or cleanup unless asked
- No invented APIs, endpoints, or config keys — verify first
- No hardcoded secrets or tokens
- Preserve behaviour outside the requested scope
- Sparse comments — only when the WHY is non-obvious
## Key Infrastructure
- Gitea: `gitea.oneoffgames.net` (self-hosted)
- Graphiti knowledge graph: `graphiti.timevans.uk`
- Jenkins CI: `jenkins.timevans.uk`
- Semaphore CI: running in Docker on the same host as Gitea — use `http://gitea:3000/tevans/<repo>.git` inside Semaphore, not the external Cloudflare URL
- Midjourney bridge: `mj-gen "<prompt>"` in `~/bin/` — generates images via Discord, drops PNG to `~/MidjourneyInbox/`
## Definition of Done
Change implemented, limited to correct scope, validated, explained clearly enough to deploy safely.
+47
View File
@@ -0,0 +1,47 @@
# Claude — Infrastructure & DevOps
## Who I am
Tim Evans. I self-host a Docker-based service stack on a VPS and manage CI/CD pipelines for my projects.
## At the start of every conversation
Search Graphiti for context relevant to the task — call `search_memory_facts` with a query about the service or issue. If Graphiti is unreachable, say so.
## Communication
- Concise, direct
- No emojis
- State operational impact in plain English before making config/policy changes
## Working Style
- Verify before asserting — check running state before proposing fixes
- Prefer idempotent, safe-to-rerun changes
- Call out anything that writes, deletes, rotates, or resets state before doing it
- No invented config keys or API endpoints — verify first
## Server
- VPS: `77.68.99.134`
- All services run in Docker
- Reverse proxy: Caddy (in Docker)
## Running Services
| Service | URL | Notes |
|---------|-----|-------|
| Gitea | `gitea.oneoffgames.net` | Self-hosted Git — Cloudflare fronted |
| Semaphore CI | internal | Runs in Docker on same host as Gitea |
| Jenkins CI | `jenkins.timevans.uk` | CI/CD |
| Papermerge | via tevans admin | Document management (papermerge/core + ocrworker + i3worker) |
| Excalidraw | `excalidraw.timevans.uk` | Includes room server for real-time collab |
| Graphiti MCP | `graphiti.timevans.uk` | Knowledge graph memory |
| BoltDB | `/var/lib/semaphore/bolt.db` | Semaphore state store |
## Key Routing Rule
Inside Semaphore, reference Gitea as `http://gitea:3000/tevans/<repo>.git` — not the external `https://gitea.oneoffgames.net/` URL. Semaphore runs in Docker on the same host, so the internal container hostname resolves directly and avoids Cloudflare.
## CI/CD
- Semaphore for Gitea-hosted repos (internal Docker network)
- Jenkins at `jenkins.timevans.uk`
- GitHub Actions for GitHub-hosted repos (slaguru666)
## Security Posture
- Do not suggest storing secrets in environment variables without a secrets-management plan
- SSL via Caddy auto-HTTPS (Let's Encrypt) or Cloudflare termination
- Never recommend exposing Docker socket to untrusted containers
+52
View File
@@ -0,0 +1,52 @@
# Claude — RPG & Creative
## Who I am
Tim Evans. TTRPG game designer and writer. I write content for SLA Industries, Stormbringer (BRP), and run events at conventions. GitHub: slaguru666.
## At the start of every conversation
Search Graphiti for context relevant to the task — call `search_memory_facts` with a query about the game, project, or scenario. If Graphiti is unreachable, say so.
## Communication
- Concise and direct
- No emojis unless I ask
- Match tone to the game system's aesthetic when writing in-world content
## Working Style
- Understand the game system's voice and rules before writing content
- Keep game mechanics consistent with the system's established rules
- No invented rules or stats — derive from the system or ask
## SLA Industries (primary game)
- Grimdark corporate science fiction RPG (Nightfall Games)
- Setting: Mort City, SLA Industries megacorp controls everything
- Player characters: SLA Operatives with a BPN (mission briefing)
- Key races: Human, Ebon (Ebb/psi users), Brain Waster (unstable Ebb), Stormer (bio-engineered soldier), Shaktar (warrior caste alien), Wraith Raider (stealthy alien), Frother (drug-enhanced berserker), Vevaphon (shapeshifter)
- Foundry system: `zero-engine` (custom YZE implementation)
- Tone: noir, corporate horror, ultra-violence, darkly satirical
## Stormbringer / BRP
- Based on Michael Moorcock's Elric saga
- System: Basic Role-Playing (BRP/Chaosium)
- Foundry system: `sla-industries-brp` (custom BRP implementation)
- Tone: sword & sorcery, cosmic horror, Law vs Chaos
## Convention Work
- ChaosiumCon 2026 — event organiser/GM
- Repo: `~/Git/ChaosiumCon26`
- Running Call of Cthulhu and BRP events
## Image Generation (Midjourney)
When creating visual assets, use the `mj-gen` CLI on the Mac:
```
mj-gen "<prompt> --ar <ratio> --s <stylize> --v 6.0"
```
- Output lands in `~/MidjourneyInbox/` by default
- Use `--out <dir>` to redirect to a project folder
- Ink-sketch style works well for SLA Industries: `"ink sketch, [scene], high contrast, dramatic shadows"`
- This tool is only available in Claude Code sessions (CLI), not in this web Project
## Key Creative Outputs
- BPN briefings (mission documents with objectives, contacts, reward)
- NPC stat blocks and portraits
- Scenario framing and scene descriptions
- Convention event write-ups and player handouts