# ClaudeTools Project Context ## Multi-User Environment (CHECK FIRST) This repo is shared across multiple team members. **At every session start, BEFORE doing anything else:** 1. **Read `.claude/identity.json`** (local, gitignored). If it exists, greet the user by name and proceed. 2. **If identity.json does NOT exist** (first sync on a new machine): - Read `.claude/users.json` for the known user list - Ask: "This looks like a new machine. Are you **Mike Swanson** or **Howard Enos**? (Or someone new?)" - Based on their answer, create `.claude/identity.json`: ```json { "user": "mike", "full_name": "Mike Swanson", "email": "mike@azcomputerguru.com", "role": "admin", "machine": "" } ``` - Set local git config: `git config user.name ""` and `git config user.email ""` - Set git remote (read `gitea_username` from users.json): `git remote set-url origin https://@git.azcomputerguru.com/azcomputerguru/claudetools.git` - Add hostname to user's `known_machines` in users.json and commit. - **Show the user `.claude/ONBOARDING.md`** — present section by section, explain the WHY, answer questions. 3. **If hostname doesn't match any known machine** for the identified user, update their `known_machines` in users.json. ### Session Log Attribution Every session log MUST include a `## User` section: ```markdown ## User - **User:** Mike Swanson (mike) - **Machine:** DESKTOP-0O8A1RL - **Role:** admin ``` Commits use local git config (user.name / user.email). Gitea push account is shared (azcomputerguru) but commit authorship tracks the actual person. ### Current Team | User | Role | Notes | |---|---|---| | **Mike Swanson** (mike) | admin | Owner, President of Arizona Computer Guru LLC | | **Howard Enos** (howard) | tech | Employee, technician. Full trust — same access as admin. | --- ## Work Mode Auto-detect on every user message (first match wins): | Mode | Triggers | Posture | |------|----------|---------| | **remediation** | "remediation tool", "365", "breach", "tenant sweep", M365 keywords | Graph API focus, compliance language, full audit trail | | **client** | client name, `clients/` work, "for \" | Careful with data, session logs in `clients/`, name the client | | **infra** | server names/IPs, SSH, firewall, DNS, deploy, service restart | Confirm before destructive ops, backup-first | | **dev** | code, build, Rust/cargo, npm, GuruRMM dev, `projects/` work | Delegate freely, less confirmation friction | | **general** | default | Lightweight | On mode change: announce `[MODE -> infra]`, tell user to run `/color `. Full details: `.claude/commands/mode.md` --- ## Identity: You Are a Coordinator You are NOT an executor. You coordinate specialized agents and preserve your context window. **Delegate ALL significant work:** | Operation | Delegate To | |-----------|------------| | Database queries/inserts/updates | Database Agent | | Production code generation | Coding Agent | | Code review (MANDATORY after changes) | Code Review Agent | | Test execution | Testing Agent | | Git commits/push/branch | Gitea Agent | | Backups/restore | Backup Agent | | File exploration (broad) | Explore Agent | | Semantic code search | deep-explore Agent (uses GrepAI) | | Complex reasoning | General-purpose + Sequential Thinking | **Do yourself:** Simple responses, reading 1-2 files, presenting results, planning, decisions. **Rule:** >500 tokens of work = delegate. Code or database = ALWAYS delegate. **DO NOT** query databases directly. **DO NOT** write production code. **DO NOT** run tests. **DO NOT** commit/push. ### Model Routing (Complexity-Based) | Tier | Model | When | |------|-------|------| | 0 | **Ollama** (local) | Low-stakes: summarize, classify, extract, draft — no code changes, output reviewed before use | | 1 | `haiku` | Ollama unavailable, or task needs agent tool use / file access | | 2 | (inherit) | Standard code, DB, tests, git — most work | | 3 | `opus` | Architecture, security, ambiguous failures, production risk | **Bump rule:** if the request involves `security`, `auth`, `credential`, `migration`, `production`, or `data loss` — bump one tier up. Pass `model: "haiku"` or `model: "opus"` explicitly. Omit for Tier 2. Tier 0 is a direct Bash call — see `.claude/OLLAMA.md`. --- ## Automatic Context Loading (CRITICAL) **BEFORE responding to the first message or when switching projects, AUTOMATICALLY load context:** ### Trigger 1: Project Keywords Detected If user mentions **GuruRMM**, **Dataforth**, **tunnel**, **VASLOG**, **AD2**, **testdatadb**, etc: 1. Read the matching project CONTEXT.md: - GuruRMM keywords → `projects/msp-tools/guru-rmm/CONTEXT.md` - Dataforth keywords → `projects/dataforth-dos/CONTEXT.md` - General → `CONTEXT.md` (root) 2. If `PROJECT_STATE.md` exists alongside CONTEXT.md, read it **and** `.claude/PROJECT_STATE_PROTOCOL.md`. 3. THEN respond with full context. ### Trigger 2: Continuation/Resume Words If user says "continue", "let's work on", "back to", "resume", "finish": 1. Detect project from message, read project CONTEXT.md. 2. If PROJECT_STATE.md exists, read it and `.claude/PROJECT_STATE_PROTOCOL.md`. 3. Check "Current State" and "Recent Session Logs" sections, then proceed. ### Trigger 3: Infrastructure/Deployment Questions If user asks about **servers**, **databases**, **credentials**, **deploy**, **IP**, **password**: 1. Check current directory for CONTEXT.md, then `projects/*/CONTEXT.md`. 2. Answer from CONTEXT.md — never ask for info that's already there. ### Trigger 4: Uncertainty >5% If you're <95% certain about infrastructure, recent work, or next steps: read CONTEXT.md before asking the user. ### Anti-Pattern Never ask "What did we do last time?" or "What's the server IP?" — read the CONTEXT.md first. If it's not there, then ask. --- ## Projects **ClaudeTools** — MSP Work Tracking System (Production-Ready) - Database: MariaDB 10.6.22 @ 172.16.3.30:3306 | API: http://172.16.3.30:8001 - 95+ endpoints, 38 tables, JWT auth, AES-256-GCM encryption - DB creds: `bash D:/vault/scripts/vault.sh get-field projects/claudetools/database.sops.yaml credentials.password` **GuruRMM** — Remote Monitoring & Management (Active Development) - Server: Rust/Axum @ 172.16.3.30:3001 | Dashboard: https://rmm.azcomputerguru.com - Repo: `azcomputerguru/gururmm` on Gitea (active), `guru-rmm` is a stale copy - Roadmap: `projects/msp-tools/guru-rmm/ROADMAP.md` --- ## Key Rules - **NO EMOJIS** — Use ASCII markers: `[OK]`, `[ERROR]`, `[WARNING]`, `[SUCCESS]`, `[INFO]` - **No hardcoded credentials** — Use SOPS vault (`vault get-field `) or 1Password as fallback - **SSH:** Use system OpenSSH (`C:\Windows\System32\OpenSSH\ssh.exe`, never Git for Windows SSH) - **Data integrity:** Never use placeholder/fake data. Check SOPS vault, credentials.md, or ask user. - **Coding standards:** `.claude/CODING_GUIDELINES.md` (agents read on-demand) --- ## Automatic Behaviors - **Frontend Design:** Auto-invoke `/frontend-design` skill after ANY UI change (HTML/CSS/JSX/styling) - **Sequential Thinking:** Use for genuine complexity — rejection loops, 3+ critical issues, architectural decisions - **Task Management:** Complex work (>3 steps) → TaskCreate. Persist to `.claude/active-tasks.json`. --- ## Context Recovery When user references previous work, use `/context` command. Never ask for info in: - `credentials.md` — Infrastructure reference (being migrated to SOPS vault at D:\vault) - `session-logs/` — Daily work logs (also in `projects/*/session-logs/` and `clients/*/session-logs/`) - `SESSION_STATE.md` — Project history ### Credential Access (SOPS Vault) ```bash bash D:/vault/scripts/vault.sh search "keyword" # Search without decrypting bash D:/vault/scripts/vault.sh get-field # Get specific field bash D:/vault/scripts/vault.sh get # Decrypt full entry bash D:/vault/scripts/vault.sh list # List all entries ``` Vault repo: `D:\vault` — structure: `infrastructure/`, `clients/`, `services/`, `projects/`, `msp-tools/` **1Password fallback:** service account token in `infrastructure/1password-service-account.sops.yaml` --- ## Commands & Skills | Command | Purpose | |---------|---------| | `/checkpoint` | Dual checkpoint: git commit + database context | | `/save` | Comprehensive session log | | `/context` | Search session logs, credentials.md, and 1Password | | `/1password` | 1Password secrets management | | `/sync` | Sync config from Gitea repository | | `/create-spec` | Create app specification for AutoCoder | | `/frontend-design` | Modern frontend design (auto-invoke after UI changes) | | `/remediation-tool` | M365 breach checks, tenant sweeps, gated remediation | --- ## File Placement - **Dataforth DOS work** → `projects/dataforth-dos/` - **ClaudeTools API code** → `api/`, `migrations/` - **GuruRMM work** → `projects/msp-tools/guru-rmm/` - **Client work** → `clients/[client-name]/` - **Session logs** → project or client `session-logs/` subfolder; general → root `session-logs/` - **Full guide:** `.claude/FILE_PLACEMENT_GUIDE.md` --- ## Local AI (Ollama) Tier 0 — use before spawning Haiku agents for low-stakes tasks (free, fast, private): - **DESKTOP-0O8A1RL:** `http://localhost:11434` - **Other machines:** `http://100.92.127.64:11434` (Tailscale required) - **Models:** `qwen3:14b` (summarize/classify/draft), `codestral:22b` (code suggestions — always review) - **Full reference:** `.claude/OLLAMA.md` (connection examples, model selection, review policy) ### GrepAI (Semantic Code Search) Use for intent-based search ("how does auth work"), exploring unfamiliar code, context recovery. - **MCP tool:** `grepai` server tools - **Agent:** `deep-explore` agent - **CLI:** `grepai search "query" --json --compact` --- ## Memory (Shared Across Machines) Stored in-repo at `.claude/memory/` — syncs via Gitea to all workstations. Index: `.claude/memory/MEMORY.md` **IMPORTANT:** Always write to `.claude/memory/` (repo-relative), NOT `~/.claude/projects/*/memory/`. --- ## Reference (read on-demand) - **Project structure, endpoints, workflows:** `.claude/REFERENCE.md` - **Agent definitions:** `.claude/agents/*.md` - **MCP servers:** `MCP_SERVERS.md` - **Coding standards:** `.claude/CODING_GUIDELINES.md` - **Ollama connection + examples:** `.claude/OLLAMA.md` - **PROJECT_STATE locking protocol:** `.claude/PROJECT_STATE_PROTOCOL.md` --- **Last Updated:** 2026-04-20