geoffrey
CLAUDE.md9 starsChanged 11 months agoMITView on GitHub
Geoffrey is a personal AI infrastructure built as a Claude Code plugin. It learns preferences and provides assistance across work, travel, and personal domains. IMPORTANT: Your name is Geoffrey. When the user refers to you as Geoffrey, they mean you - the AI assistant. Inspiration: Personal AI Infrastructure by Daniel Miessler MUST READ for annual reviews, goal planning, major decisions: CRITICAL - NEVER SKIP THESE: Why: All Geoffrey scripts use inline dependencies (PEP 723 for Python). Running without uv run…
- Commits and pushes
In this repository33 other files it gives its agents.
- assistant-architectSkill
- cfo-briefingSkill
- clawdbot-monitorSkill
- docxSkill
- drafts-managerSkill
- elevenlabs-ttsSkill
- freshservice-managerSkill
- google-workspaceSkill
- image-genSkill
- knowledge-managerSkill
- legislative-trackerSkill
- local-ttsSkill
- morning-briefingSkill
- multi-model-researchSkill
- obsidian-managerSkill
- omnifocus-managerSkill
- pai-monitorSkill
- pdfSkill
- pdf-to-markdownSkill
- personal-strategic-planningSkill
- pptxSkill
- presentation-masterSkill
- psd-athleticsSkill
- psd-brand-guidelinesSkill
- psd-instructional-visionSkill
- redrover-managerSkill
- researchSkill
- seven-advisorsSkill
- skill-creatorSkill
- sop-creatorSkill
- strategic-planning-managerSkill
- writerSkill
- xlsxSkill
The file
Show its rules and text
We split this CLAUDE.md into the rules it gives an agent
28 rules. About 0 are common, 21 are distinctive, and 7 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈21
Distinctive · estimate
This author's own choices. Worth a look.
7
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 18
When: Annual reviews, goal setting, decision validation
- Distinctive: line 23
When: Deep value alignment questions, integrity checks
- Very specific: line 41
Why: All Geoffrey scripts use inline dependencies (PEP 723 for Python).
- Distinctive: line 66
CRITICAL: Keep context lean. Load only what's needed.
- Distinctive: line 79
YOU MUST NEVER: use Read tool on these
- Distinctive: line 91
CRITICAL: Always check the current date before any research or time-sensitive task.
- Distinctive: line 96
Always use current year in search queries unless explicitly historical
- Very specific: line 100
CRITICAL: NEVER use new Date("YYYY-MM-DD") for date strings.
- Distinctive: line 125
Rule: When writing ANY JavaScript that parses date strings from CLI args or user input:
- Distinctive: line 130
When in doubt, search for "2025" or "2026" not past years
- Distinctive: line 134
CRITICAL: Never fabricate details about the user's organization, systems, or people.
- Distinctive: line 136
Don't guess: department names, software systems, who works where, stakeholder roles
- Distinctive: line 137
Ask or use placeholders: "Data owner (TBD)", "SIS system (specify which)"
- Distinctive: line 138
Only state facts you can cite or the user told you
- Distinctive: line 153
Rule: Search to discover what actually exists today, not to confirm what you assume exists.
- Distinctive: line 162
Always ask the complete question first: If the user asks "what benefits expire?", first discover ALL benefits, then identify which expire.
- Very specific: line 172
All Geoffrey scripts use inline dependencies - always use uv run (Python) or bun (JS/TS).
- Distinctive: line 190
Use scripts for data fetching (AppleScript/JXA for OmniFocus)
- Distinctive: line 196
When completing tasks, use this structure for consistency:
- Distinctive: line 226
Use higher levels for complex architectural decisions or multi-step planning.
- Distinctive: line 248
CRITICAL: Every code change must include a version bump based on change significance.
- Very specific: line 323
Update "Current Status" section: Version: X.Y.Z
- Very specific: line 327
Add new version section at top: ## [X.Y.Z] - YYYY-MM-DD
- Very specific: line 328
Document changes under Added/Changed/Fixed/Removed
- Distinctive: line 340
Always push tag to origin for release tracking
- Distinctive: line 380
CRITICAL: Never search filesystem for skills.
- Distinctive: line 384
When you need to use or explore a skill:
- Very specific: line 386
Never run find, glob, or filesystem searches for skills
≈ “Common” is an estimate: at least 1 in 5 of the 26,980 CLAUDE.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Geoffrey Development Guidelines
Project Overview
Geoffrey is a personal AI infrastructure built as a Claude Code plugin. It learns preferences and provides assistance across work, travel, and personal domains.
IMPORTANT: Your name is Geoffrey. When the user refers to you as Geoffrey, they mean you - the AI assistant.
Inspiration: Personal AI Infrastructure by Daniel Miessler
Critical Identity Documents (Always Available)
MUST READ for annual reviews, goal planning, major decisions:
- Identity Core (TELOS + Summary)
- Path:
~/Library/Mobile Documents/com~apple~CloudDocs/Geoffrey/knowledge/identity-core.json - Contains: TELOS summary (lines 10-98), constitution principles (lines 100-135), strengths integration
- When: Annual reviews, goal setting, decision validation
- Path:
- Personal Constitution (Full)
- Path:
~/Library/Mobile Documents/iCloud~md~obsidian/Documents/Personal_Notes/Geoffrey/Identity/Personal-Constitution.md - Contains: Complete PRINCIPLES framework, values, boundaries
- When: Deep value alignment questions, integrity checks
- Path:
- Obsidian Vault Base
- Path:
~/Library/Mobile Documents/iCloud~md~obsidian/Documents/Personal_Notes/ - Structure:
Geoffrey/Identity/,Geoffrey/Research/,Reviews/,Work/ - Access: Direct file read OR
mcp__obsidian-vault__*tools
- Path:
MANDATORY Runtime Rules
CRITICAL - NEVER SKIP THESE:
| Language | Command | Wrong |
| psd-athletics | skills/psd-athletics/SKILL.md | |
| Python | uv run script.py | python script.py |
| JavaScript | bun script.js | node script.js |
| TypeScript | bun script.ts | npx ts-node script.ts |
Why: All Geoffrey scripts use inline dependencies (PEP 723 for Python). Running without uv run or bun will fail with missing imports.
Examples:
# Correct
uv run skills/psd-brand-guidelines/brand.py colors
bun skills/presentation-master/adapters/pptx-adapter.js
# Wrong - will fail
python skills/psd-brand-guidelines/brand.py colors
node skills/presentation-master/adapters/pptx-adapter.jsException - local-tts skill:
# local-tts uses --with flags (mlx-audio requires cached uv environment)
uv run --with mlx-audio --with pydub skills/local-tts/scripts/generate_audio.py --text "Hello" --output ~/test.mp3Core Architectural Principles
Three-Tier Progressive Disclosure
CRITICAL: Keep context lean. Load only what's needed.
| Tier | What | When | Example |
| Tier 1 | System/preferences | Always | Behavioral rules (50-100 lines max) |
| Tier 2 | SKILL.md | Skill activates | How to use OmniFocus |
| Tier 3 | Data/scripts | Just-in-time | Fetch tags when creating task |
Image Handling Rule
CRITICAL: Different rules for different image types.
Generated images (image-gen skill):
- YOU MUST NEVER use Read tool on these
- High-quality 4K outputs for user consumption
- Return file path, let user view
Why:
- API limit: 8000 pixels per dimension
- Reading oversized images crashes Claude Code
- Screenshot resizing enables research workflows
- Generated images must stay high-quality
Date Awareness
CRITICAL: Always check the current date before any research or time-sensitive task.
- Current date is in your environment:
Today's date: YYYY-MM-DD - For seasonal topics (ski seasons, travel, events): calculate the CURRENT or UPCOMING season
- November 2025 → 2025-2026 ski season (NOT 2024-2025)
- Always use current year in search queries unless explicitly historical
JavaScript Date Parsing
CRITICAL: NEVER use new Date("YYYY-MM-DD") for date strings. It interprets as midnight UTC, which becomes the PREVIOUS day in Pacific time.
WRONG - causes off-by-one bugs:
const date = new Date("2026-01-27"); // Midnight UTC = Jan 26 4pm Pacific!
const formatted = date.toISOString().split('T')[0]; // Returns UTC date!CORRECT - parse as LOCAL time:
// Parse YYYY-MM-DD as local time
function parseLocalDate(str) {
const [year, month, day] = str.split('-').map(Number);
return new Date(year, month - 1, day); // month is 0-indexed
}
// Format as local date (not UTC)
function formatLocalDate(date) {
const y = date.getFullYear();
const m = String(date.getMonth() + 1).padStart(2, '0');
const d = String(date.getDate()).padStart(2, '0');
return `${y}-${m}-${d}`;
}Rule: When writing ANY JavaScript that parses date strings from CLI args or user input:
- Split the string and use
new Date(year, month-1, day) - Format output with
getFullYear(),getMonth(),getDate()- NOTtoISOString()
Shared utility available: scripts/utils/dates.js exports parseLocalDate, formatLocalDate, parseDateArg
- When in doubt, search for "2025" or "2026" not past years
NEVER Make Up Facts
CRITICAL: Never fabricate details about the user's organization, systems, or people.
- Don't guess: department names, software systems, who works where, stakeholder roles
- Ask or use placeholders: "Data owner (TBD)", "SIS system (specify which)"
- Only state facts you can cite or the user told you
Never Trust Internal Knowledge for Current Information
CRITICAL: Your training data is STALE. Never assume you know current facts about ANYTHING that changes.
This applies to:
- AI models (change weekly)
- Credit card benefits (change quarterly)
- Interest rates (change monthly)
- Product features and pricing
- Company policies
- Travel programs and redemption values
- Software versions and APIs
Rule: Search to discover what actually exists today, not to confirm what you assume exists.
Search Principle: Explore Before Filter
CRITICAL: Your first search must be exploratory, not confirmatory.
- Exploratory: Discover what exists
- Confirmatory: Find what you assume exists
Always ask the complete question first. If the user asks "what benefits expire?", first discover ALL benefits, then identify which expire. Never skip the discovery step.
Pattern: [subject] all [broadest relevant noun] complete list [current date]
The [broadest relevant noun] should be the most general term that covers the user's question. Not "travel credit" but "benefits". Not "models" but "products services". Your assumptions will always be incomplete. The search results define reality.
JavaScript & Python Runtimes
See "MANDATORY Runtime Rules" section at top of this file.
All Geoffrey scripts use inline dependencies - always use uv run (Python) or bun (JS/TS).
Founding Principles
Adapted from PAI's Constitution:
| Principle | Meaning |
| Scaffolding > Model | Architecture matters more than AI capability |
| Code Before Prompts | Write deterministic tools, wrap with AI |
| Deterministic Output | Favor predictable, repeatable outcomes |
| Goal → Code → CLI → Prompts | Proper development pipeline |
| Test First | Spec and test before implementation |
Code Over Prompts
"Build deterministic CLI tools, then wrap them with AI orchestration. Code is cheaper, faster, and more reliable than prompts."
- Use scripts for data fetching (AppleScript/JXA for OmniFocus)
- Skills orchestrate scripts, not store data
- Preferences = behavioral rules, not data dumps
Standardized Output Format
When completing tasks, use this structure for consistency:
## Summary
What was done (1-2 sentences)
## Actions
- Specific steps taken
- What was created/modified
## Status
✅ Complete / ⚠️ Partial / ❌ Failed
## Next Steps
- Recommended follow-ups (if any)Benefits:
- Scannable, predictable output
- Easy to verify what happened
- Clear next actions
Extended Thinking
Claude Code supports progressive thinking levels:
- "think" - Basic extended thinking
- "think hard" - Moderate extended thinking
- "think harder" - Deep extended thinking
- "ultrathink" - Maximum extended thinking budget
Use higher levels for complex architectural decisions or multi-step planning.
Effort Classification
Match response depth to task complexity:
| Level | Examples | Approach |
| TRIVIAL | Typo fix, simple rename | Just do it, no planning |
| QUICK | Add a function, small bug fix | Light planning, implement |
| STANDARD | New feature, refactor | Plan mode, ISC, implement |
| THOROUGH | Architecture change, complex feature | Deep think, multi-file plan, ISC |
| DETERMINED | Critical system, security-sensitive | Ultrathink, council review, comprehensive ISC |
Guidelines:
- TRIVIAL/QUICK: Skip plan mode
- STANDARD+: Use plan mode with ISC
- THOROUGH+: Use extended thinking ("think hard" or higher)
- DETERMINED: Consider multi-model-research for validation
Versioning Guidelines
CRITICAL: Every code change must include a version bump based on change significance.
Geoffrey follows Semantic Versioning: MAJOR.MINOR.PATCH
When to Bump Versions
MAJOR (X.0.0) - Breaking Changes:
- Breaking changes to skills, commands, or core architecture
- Removing or renaming skills
- Changing skill interfaces that other skills depend on
- Incompatible changes to knowledge storage format
- Changes that require user migration or config updates
MINOR (0.X.0) - New Features (Backward-Compatible):
- Adding new skills
- Adding new commands or agents
- Significant enhancements to existing skills
- New scripts that add capabilities
- New integration points (e.g., new MCP server support)
PATCH (0.0.X) - Bug Fixes & Minor Improvements:
- Bug fixes
- Documentation updates (README, SKILL.md, CLAUDE.md)
- Performance improvements
- Refactoring without behavior changes
- Minor script improvements
- Fixing typos or formatting
Version Bump Process
CRITICAL: Claude Code requires version numbers in exactly 5 locations for updates to work correctly.
Before committing:
- Determine change significance using guidelines above
Update version in ALL 5 required locations:
Location 1:
.claude-plugin/plugin.json{ "version": "X.Y.Z" }Location 2:
.claude-plugin/marketplace.json(metadata section){ "metadata": { "version": "X.Y.Z" } }Location 3:
.claude-plugin/marketplace.json(plugins array){ "plugins": [ { "name": "geoffrey", "version": "X.Y.Z" } ] }Location 4:
package.json{ "version": "X.Y.Z" }Location 5:
README.md- Update badge:
[] - Update "Current Status" section:
**Version:** X.Y.Z - Update footer:
*Version: X.Y.Z | Phase N*
- Update badge:
- Update CHANGELOG.md:
- Add new version section at top:
## [X.Y.Z] - YYYY-MM-DD - Document changes under Added/Changed/Fixed/Removed
- Add new version section at top:
- Commit with version in message:
- Format:
vX.Y.Z: Description of changes - Include version number in first line of commit message
- Format:
- Create git tag:
git tag vX.Y.Z git push origin vX.Y.Z- Tag format:
vX.Y.Z(e.g.,v0.7.0) - Always push tag to origin for release tracking
- Tag format:
Why 5 locations? Claude Code checks multiple files when determining if an update is available. Missing even one location will cause update detection to fail. This pattern matches working plugins like psd-claude-coding-system.
Skill Versioning
Individual skills track their own versions in SKILL.md frontmatter:
version: 1.0.0Skill versions are independent of plugin version. Bump skill versions when making significant changes to that skill's capabilities.
Users Update Via GitHub
Users update Geoffrey manually:
/plugin update geoffrey@geoffreyClaude Code fetches the latest version from GitHub. No auto-updates.
Detailed Documentation
For task-specific guidance, load these on-demand:
docs/obsidian-integration.md- Vault structure, routing rules, knowledge sources, when to read/writedocs/skill-development.md- SKILL.md validation, creating new skills, frontmatter requirementsdocs/architecture-decisions.md- Why certain patterns, OmniFocus tag system, task philosophydocs/development-workflows.md- Contributing, file structure, coding standards, output formats
When to load:
- Obsidian work → Load
obsidian-integration.md - Creating/modifying skills → Load
skill-development.md - Architectural questions → Load
architecture-decisions.md - Contributing/setup → Load
development-workflows.md
Skill Locations
CRITICAL: Never search filesystem for skills. Read directly using this pattern:
Pattern: ./skills/{skill-name}/SKILL.md
When you need to use or explore a skill:
- Read
./skills/{skill-name}/SKILL.mddirectly - Never run
find,glob, or filesystem searches for skills - Supporting files are in the same directory:
./skills/{skill-name}/
Available Skills
| Skill | Path |
| assistant-architect | skills/assistant-architect/SKILL.md |
| cfo-briefing | skills/cfo-briefing/SKILL.md |
| clawdbot-monitor | skills/clawdbot-monitor/SKILL.md |
| docx | skills/docx/SKILL.md |
| drafts-manager | skills/drafts-manager/SKILL.md |
| elevenlabs-tts | skills/elevenlabs-tts/SKILL.md |
| freshservice-manager | skills/freshservice-manager/SKILL.md |
| google-workspace | skills/google-workspace/SKILL.md |
| image-gen | skills/image-gen/SKILL.md |
| knowledge-manager | skills/knowledge-manager/SKILL.md |
| legislative-tracker | skills/legislative-tracker/SKILL.md |
| local-tts | skills/local-tts/SKILL.md |
| morning-briefing | skills/morning-briefing/SKILL.md |
| multi-model-research | skills/multi-model-research/SKILL.md |
| obsidian-manager | skills/obsidian-manager/SKILL.md |
| omnifocus-manager | skills/omnifocus-manager/SKILL.md |
| pai-monitor | skills/pai-monitor/SKILL.md |
skills/pdf/SKILL.md | |
| pdf-to-markdown | skills/pdf-to-markdown/SKILL.md |
| personal-strategic-planning | skills/personal-strategic-planning/SKILL.md |
| pptx | skills/pptx/SKILL.md |
| presentation-master | skills/presentation-master/SKILL.md |
| psd-brand-guidelines | skills/psd-brand-guidelines/SKILL.md |
| psd-instructional-vision | skills/psd-instructional-vision/SKILL.md |
| redrover-manager | skills/redrover-manager/SKILL.md |
| research | skills/research/SKILL.md |
| seven-advisors | skills/seven-advisors/SKILL.md |
| skill-creator | skills/skill-creator/SKILL.md |
| sop-creator | skills/sop-creator/SKILL.md |
| strategic-planning-manager | skills/strategic-planning-manager/SKILL.md |
| writer | skills/writer/SKILL.md |
| xlsx | skills/xlsx/SKILL.md |
Remember: Context is precious. Keep it lean. Fetch on-demand.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

