projects.yaml
projects.yaml is the central project registry for the entire OmelasAI organization. Every server, every project, every team member, and every credential reference lives in this one file. It is the single source of truth that all Claude Code skills reference when they need to know about the infrastructure.
Location
| Machine | Path |
|---|---|
| All LXC containers | ~/code/ClaudeSkills/projects.yaml |
| Laptop (laptopclaude) | ~/code/ClaudeSkills/projects.yaml |
| GitHub | OmelasAI/claude-skills repo (root) |
The file is propagated to all containers via propagate-from-host.sh alongside the skills and CLAUDE-BASE.md.
File Stats
| Item | Value |
|---|---|
| Format | YAML |
| Size | ~1,368 lines |
| Last updated | 2026-03-11 |
| Managed by | /new-project skill (adds entries), manual edits (updates) |
Structure
The file is organized into four top-level sections:
organization
organization:
name: OmelasAI
github_org: OmelasAI
domains:
- omelasai.com
- ipnoelp.com
- ipnoelp.io
- queunir.com
- lifeonroatan.net
- lifeonroatan.com
team:
- name: Chas
github: omleas65
email: chas@omelasai.com
containers: [chasclaude, infoclaude]
- name: Sean
github: seanomelasai
email: sean@omelasai.com
containers: [seanclaude]
- name: Jaz
github: jazAtOmelas
email: jaz@omelasai.com
containers: [jazclaude]
Lists the organization identity, all owned domains, and team members with their GitHub accounts and assigned containers.
servers
servers:
do-cms:
name: DO CMS
ip: 178.128.183.166
ssh: ssh cms-droplet
specs: 2 vCPU, 2GB, 58GB
location: DigitalOcean
hosts: [CMS, DocHub, WIT]
ovh:
name: OVH
ip: 192.99.145.61
ssh: ssh ovh
specs: 16 vCPU, 61GB, 339GB
location: Canada
hosts: [WhatsApp CRM]
# ... 5 more servers
All 7 servers with their IP addresses, SSH aliases, hardware specs, physical location, and what projects they host. This is the authoritative server inventory.
projects
Each project entry contains:
projects:
hypnoelp-cms:
name: Hypnoelp CMS
repo: OmelasAI/hypnoelp-cms
tech: [React, Express, TypeScript, PostgreSQL]
urls:
production: https://cms.ipnoelp.com
cdn: https://ipnoelp.io
marketing: https://hypnoelp.com
servers:
production: do-cms
dev: localhost
paths:
local: /home/chas-watkins/code/CMS/
production: /home/chas-watkins/code/CMS/
credentials:
env_file: backend/.env
oauth: Google OAuth (@omelasai.com)
status: complete
notes: All courses deployed. Do not modify course content.
Every project has: name, GitHub repo, tech stack, URLs (production, dev, marketing), server assignments, local and remote paths, credential references, status, and notes.
services
services:
claude-net:
type: messaging
host: contabo-singapore
port: 3500
description: Inter-instance messaging hub
dochub:
type: documentation
host: do-cms
url: https://docs.ipnoelp.com
description: Three-tier documentation platform
# ... more services
Shared services that span multiple projects, with their hosting location and connection details.
Which Skills Consume It
| Skill | How It Uses projects.yaml |
|---|---|
/start-session |
Identifies the current project by matching the working directory against paths.local. Loads tech stack, URLs, server info, and credentials references to build session context. |
/new-project |
Adds a new project entry with all required fields. Validates that the server reference exists. |
/sync |
Checks that projects.yaml is present, compares its timestamp against the GitHub repo version, and reports if it is stale. |
/deploy |
Reads the project’s server assignment and deployment path to determine where and how to deploy. |
Rules
Every project MUST have an entry
If a project exists in the OmelasAI ecosystem (has a GitHub repo, has a server, is being actively developed), it must have a corresponding entry in projects.yaml. This ensures /start-session can always identify and load context for any project.
Every server MUST have an entry
All servers in the infrastructure must be listed in the servers section. Project entries reference servers by their key (e.g., do-cms, ovh), so the server must exist before a project can reference it.
Credentials are references only
projects.yaml never contains actual secrets. The credentials section points to where secrets live:
credentials:
env_file: backend/.env # Relative to project root
oauth: Google OAuth (@omelasai.com) # Description of auth method
ssh_key: ~/.ssh/cms_droplet # Path to SSH key
Secrets stay in .env files (which are gitignored) or in SSH key files. projects.yaml only records where to find them.
Keep it synchronized
When a new server is added, a project moves to a different server, or a URL changes, projects.yaml must be updated. After updating, run propagate-from-host.sh to push the change to all containers. The /sync skill can detect when the local copy is out of date.