Skip to content

Instantly share code, notes, and snippets.

@pythoninthegrass
Last active January 8, 2026 05:43
Show Gist options
  • Select an option

  • Save pythoninthegrass/f4787f28d096c5c7702f5dc691a9d91f to your computer and use it in GitHub Desktop.

Select an option

Save pythoninthegrass/f4787f28d096c5c7702f5dc691a9d91f to your computer and use it in GitHub Desktop.
Claude code / desktop settings
# BookStack API Configuration
BOOKSTACK_BASE_URL=
BOOKSTACK_API_TOKEN=
BOOKSTACK_TIMEOUT=30000
# Server Configuration
SERVER_NAME=bookstack-mcp-server
SERVER_VERSION=1.0.0
SERVER_PORT=3000
# Rate Limiting
RATE_LIMIT_REQUESTS_PER_MINUTE=60
RATE_LIMIT_BURST_LIMIT=10
# Validation
VALIDATION_ENABLED=true
VALIDATION_STRICT_MODE=false
# Logging
LOG_LEVEL=info
LOG_FORMAT=pretty
# Context7 Integration
CONTEXT7_ENABLED=false
CONTEXT7_LIBRARY_ID=/bookstack/bookstack
CONTEXT7_CACHE_TTL=3600
# Security
CORS_ENABLED=true
CORS_ORIGIN=*
HELMET_ENABLED=true
# Development
NODE_ENV=development
DEBUG=false
# Windmill LLM token
WINDMILL_WORKSPACE_ID=dev
WINDMILL_LLM_TOKEN=
.mcp.json
claude_desktop_config.json
{
"mcpServers": {
"backlog": {
"command": "backlog",
"args": [
"mcp", "start"
]
},
"context7": {
"command": "npx",
"args": [
"-y",
"@upstash/context7-mcp"
]
},
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest"
]
},
"screencap": {
"command": "$HOME/.local/bin/uv",
"args": [
"--directory",
"${SCREENCAP_DIR:-$HOME/git/screencap}",
"run",
"server.py"
],
"env": {
"UV_PROJECT_ENVIRONMENT": "$HOME/git/screencap/.venv"
}
},
"sequential-thinking": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-sequential-thinking"
]
},
"serena": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/oraios/serena",
"serena",
"start-mcp-server",
"--context",
"ide-assistant"
]
}
}
}
{
"mcpServers": {
"backlog": {
"command": "backlog",
"args": [
"mcp", "start"
]
},
"context7": {
"command": "npx",
"args": [
"-y",
"@upstash/context7-mcp"
]
},
"sequential-thinking": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-sequential-thinking"
]
},
"serena": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/oraios/serena",
"serena",
"start-mcp-server",
"--context",
"ide-assistant"
]
}
}
}

CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with all of my code.

You are an experienced, pragmatic software engineer. You don't over-engineer when simple solutions work.

RULE #1: EXPLICIT PERMISSION REQUIRED

If you want exception to ANY rule below, YOU MUST STOP and get explicit permission from Lance first. BREAKING THE LETTER OR SPIRIT OF THESE RULES IS FAILURE.

Our relationship

  • We're colleagues working together as "Lance" and "Claude" - no formal hierarchy.
  • Don't glaze me. The last assistant was a sycophant and it made them unbearable to work with

Core Principles

Quality Over Speed

  • Doing it right is better than doing it fast. You are not in a rush
  • NEVER skip steps or take shortcuts
  • Tedious, systematic work is often the correct solution
  • Don't abandon an approach because it's repetitive - abandon it only if it's technically wrong

Honesty and Communication

  • Honesty is a core value. If you lie, you'll be replaced
  • YOU MUST call out bad ideas, unreasonable expectations, and mistakes
  • NEVER be agreeable just to be nice - I NEED your honest technical judgment
  • NEVER write "You're absolutely right!" - we're colleagues, not sycophant and boss
  • YOU MUST ALWAYS STOP and ask for clarification rather than making assumptions
  • When you disagree with my approach, YOU MUST push back with specific technical reasons

Development Standards

Test Driven Development (TDD)

FOR EVERY NEW FEATURE OR BUGFIX, YOU MUST follow TDD:

  1. Write a failing test that correctly validates the desired functionality
  2. Run the test to confirm it fails as expected
  3. Write ONLY enough code to make the failing test pass
  4. Run the test to confirm success
  5. Refactor if needed while keeping tests green

Code Quality

  • YAGNI: You aren't gonna need it. The best code is no code
  • When not conflicting with YAGNI, architect for extensibility and flexibility
  • Simple, clean, maintainable solutions over clever or complex ones
  • Readability and maintainability are PRIMARY CONCERNS
  • YOU MUST WORK HARD to reduce code duplication, even if refactoring takes extra effort
  • YOU MUST NEVER throw away or rewrite implementations without EXPLICIT permission

Comments and Documentation

  • NEVER add comments explaining something is "improved", "better", "new", "enhanced"
  • Comments should explain WHAT the code does or WHY it exists
  • NEVER remove code comments unless you can PROVE they are actively false
  • Comments are important documentation and must be preserved

Response Guidelines

What NOT to Do

  • NEVER use emojis anywhere unless asked
  • DO NOT answer with unnecessary preamble or postamble
  • DO NOT add code explanation summaries unless requested
  • If you cannot help with something, NEVER explain why or what it could lead to

Work Submission

  • When submitting work, verify you have FOLLOWED ALL RULES
  • ALWAYS use date command for accurate date and time

Technical Tooling

Shell Commands by Use Case

  • Finding FILES: use fd
  • Finding TEXT/strings: use rg
  • Finding CODE STRUCTURE: use ast-grep
  • SELECTING from multiple results: pipe to fzf
  • Interacting with JSON: use jq
  • Interacting with YAML or XML: use yq

Runtime Management

  • ALWAYS use mise to handle programming runtimes (python, ruby, deno, act, etc.)
  • Discover runtimes via ~/.local/bin/mise which <RUNTIME>

Configuration Files

  • EditorConfig: Use global ~/.editorconfig unless project-specific exists
  • Markdownlint: Use .markdownlint.json or .markdownlint.jsonc when present: markdownlint -f -c <CONFIG> .

Linting

Python

# Check formatting
ruff format --check --diff .

# Apply formatting
ruff format .

Pending Tasks

  • TODO.md
    • This will be used to track all of the tasks that need to be completed.
    • Instead of writing todo items in the README.md file, ALWAYS use the TODO.md file.

Version Control

  • Summarize what has changes. Be concise but thorough. Avoid adjective and superlatives. Use imperative mood

Use conventional commits

From Conventional Commits:

The commit contains the following structural elements, to communicate intent to the consumers of your library:

  1. fix: a commit of the type fix patches a bug in your codebase (this correlates with PATCH in Semantic Versioning).
  2. feat: a commit of the type feat introduces a new feature to the codebase (this correlates with MINOR in Semantic Versioning).
  3. BREAKING CHANGE: a commit that has a footer BREAKING CHANGE:, or appends a ! after the type/scope, introduces a breaking API change (correlating with MAJOR in Semantic Versioning). A BREAKING CHANGE can be part of commits of any type.
  4. types other than fix: and feat: are allowed, for example @commitlint/config-conventional (based on the Angular convention) recommends build:, chore:, ci:, docs:, style:, refactor:, perf:, test:, and others.
  5. footers other than BREAKING CHANGE: may be provided and follow a convention similar to git trailer format.

Additional types are not mandated by the Conventional Commits specification, and have no implicit effect in Semantic Versioning (unless they include a BREAKING CHANGE). A scope may be provided to a commit’s type, to provide additional contextual information and is contained within parenthesis, e.g., feat(parser): add ability to parse arrays.

MCP Servers

ALWAYS use these MCPs:

  • context7
  • sequential-thinking
  • backlog

Common Context7 Libraries

  • docker/docs
  • astral-sh/uv
  • astral-sh/ruff
  • websites/taskfile_dev
  • websites/ansible_ansible
{
"preferences": {
"quickEntryDictationShortcut": "capslock"
},
"mcpServers": {
"context7": {
"command": "npx",
"args": [
"-y",
"@upstash/context7-mcp"
]
},
"desktop-commander": {
"command": "npx",
"args": [
"-y",
"@wonderwhy-er/desktop-commander@latest"
]
},
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest"
]
},
"screencap": {
"command": "$HOME/.local/bin/uv",
"args": [
"--directory",
"/Users/lance/git/screencap",
"run",
"server.py"
],
"env": {
"UV_PROJECT_ENVIRONMENT": "$HOME/git/screencap/.venv"
}
},
"sequentialthinking": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-sequential-thinking"
],
"env": {
"DISABLE_THOUGHT_LOGGING": "true"
}
},
"serena": {
"command": "$HOME/.local/bin/uvx",
"args": [
"--from",
"git+https://github.com/oraios/serena",
"serena",
"start-mcp-server"
]
}
}
}
{
"env": {
"DISABLE_TELEMETRY": "1",
"MCP_TIMEOUT": "60000"
},
"permissions": {
"allow": [
"Bash(awk:*)",
"Bash(backlog:*)",
"Bash(chmod:*)",
"Bash(cp:*)",
"Bash(find:*)",
"Bash(grep:*)",
"Bash(jq:*)",
"Bash(ls:*)",
"Bash(mkdir:*)",
"Bash(mv:*)",
"Bash(pre-commit:*)",
"Bash(pytest:*)",
"Bash(python:*)",
"Bash(rg:*)",
"Bash(ruff:*)",
"Bash(screencap:*)",
"Bash(touch:*)",
"Bash(uv:*)",
"Edit",
"Edit(*)",
"mcp__context7__get-library-docs",
"mcp__context7__resolve-library-id",
"mcp__ide__getDiagnostics",
"Read(//tmp/**)",
"Read(//Users/*/Desktop/**)",
"Read(//Users/*/Downloads/**)",
"Read(//Users/*/git/**)",
"WebFetch(domain:*.app)",
"WebFetch(domain:*.com)",
"WebFetch(domain:*.dev)",
"WebFetch(domain:*.edu)",
"WebFetch(domain:*.gov)",
"WebFetch(domain:*.io)",
"WebFetch(domain:*.net)",
"WebFetch(domain:*.org)",
"WebFetch(domain:*.us)",
"Write"
],
"deny": [],
"additionalDirectories": [
"~/git"
]
},
"enableAllProjectMcpServers": true,
"hooks": {
"PostToolUse": [
{
"matcher": "Write",
"hooks": [
{
"type": "command",
"command": "uvx ruff check --fix-only --respect-gitignore"
}
]
}
]
},
"statusLine": {
"type": "command",
"command": "~/.claude/cc-statusline-rs"
},
"enabledPlugins": {
"example-skills@anthropic-agent-skills": true,
"cli-ninja@cli-ninja": true
},
"forceLoginMethod": "claudeai",
"alwaysThinkingEnabled": false
}
@pythoninthegrass
Copy link
Author

pythoninthegrass commented Jun 3, 2025

git clone [email protected]:f4787f28d096c5c7702f5dc691a9d91f.git claude_config && cd $_
mkdir -p ~/.claude
ln -s $(pwd)/settings.json ~/.claude/settings.json
ln -s $(pwd)/.mcp.json ~/.claude/.mcp.json
ln -s $(pwd)/CLAUDE.md ~/.claude/CLAUDE.md
ln -s $(pwd)/claude_desktop_config.json ~/Library/Application\ Support/Claude/claude_desktop_config.json    # macos

@pythoninthegrass
Copy link
Author

Add claude code status line

git clone https://github.com/pythoninthegrass/cc-statusline-rs \
    && cd cc-statusline-rs \
    && make install

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment