My personal Mac setup and configurations
-
Download code:
git clone https://github.com/bertini36/dotfiles.git ~/.dotfiles/ -
Brew packages installation:
brew bundle --file=mac/Brewfile
Package Description batcatwith syntax highlightingezaModern lsreplacementfzfFuzzy finder for the terminal ghGitHub CLI pre-commitGit hook manager graphvizGraph visualization tools jqJSON processor libmagicFile type detection library gotopTerminal system monitor copilot-cliGitHub Copilot CLI (cask) molemacOS disk space cleaner and system optimizer postgresql@18PostgreSQL database pyenvPython version manager uvFast Python package manager python@3.14Python interpreter tldrSimplified man pages with practical examples karabiner-elementsKeyboard remapper (cask) fdFast findreplacementripgrepFast grepreplacementsemgrepStatic analysis (SAST) scanner gitleaksSecret detection in git commits nvmNode version manager pnpmFast Node package manager claudeAnthropic Claude desktop app (cask) claude-codeAnthropic Claude CLI (cask) granolaAI meeting notepad that captures and summarizes meetings (cask) rtkCLI proxy that reduces LLM token consumption by 60-90% handySpeech-to-text utility -
Extra configuration (not available through Brew):
bash mac/config_extras.sh
Config Description gitleakshookGlobal git pre-commit hook for secret detection -
Add fonts (
fonts/) toFont Book -
Configure Karabiner
- Change
Caps LocktoCMD + CTL + Option + Shift - Map F4 to
CMD + Space(Raycast)
- Change
-
Install Oh My ZSH
- Source
shell/.zshrcfrom~/.zshrcso installer appends and machine-specific aliases stay out of the repo:
echo 'source ~/.dotfiles/shell/.zshrc' > ~/.zshrc
-
Install plugins
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions git clone https://github.com/agkozak/zsh-z ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-z
- Source
-
Install Chrome
-
Install Youtube Music (as browser pwa)
-
Install WhatsApp
-
Install Telegram
-
Install Slack
-
Install Claude
-
Install Notion
-
Install Notion Calendar
-
Install Obsidian
-
Install Jetbrains Toolbox and Pycharm
-
Install Visual Studio Code
-
Install Iterm2
-
Install Docker
-
Install Raycast
- Disable Spotlight shortcut to enable Raycast one (System Preferences -> Keyboard -> Shortcuts -> Spotlight -> Uncheck
Show Spotlight search) - Configure shortcuts following keymap.md
- Disable Spotlight shortcut to enable Raycast one (System Preferences -> Keyboard -> Shortcuts -> Spotlight -> Uncheck
-
Install Amphetamine and set it to keep the computer awake indefinitely
-
Enable auto-focus:
defaults write com.apple.Terminal FocusFollowsMouse -bool true -
Link the rest of configuration files (install Claude Code first so
~/.claude/exists)ln -s ~/.dotfiles/git/.gitignore_global ~/.gitignore_global git config --global core.excludesfile ~/.gitignore_global ln -s ~/.dotfiles/editors/vim/.vimrc ~/.vimrc ln -s ~/.dotfiles/.claude/settings.json ~/.claude/settings.json ln -s ~/.dotfiles/.claude/statusline-command.sh ~/.claude/statusline-command.sh ln -s ~/.dotfiles/.claude/CLAUDE.md ~/.claude/CLAUDE.md ln -s ~/.dotfiles/.claude/RTK.md ~/.claude/RTK.md ln -s ~/.dotfiles/.claude/skills ~/.claude/skills ln -s ~/.dotfiles/.claude/rules ~/.claude/rules ln -s ~/.dotfiles/.claude/agents ~/.claude/agents
All Claude Code configuration lives under .claude/ and is symlinked into ~/.claude/.
Note
Remote control is enabled via remoteControlAtStartup in the global settings.
Each session auto-starts the bridge, so it can be driven from
claude.ai/code or the Claude mobile app.
See the start-feature skill (.claude/skills/start-feature/SKILL.md) for detailed documentation of the development workflow using Claude, Superpowers, and the custom skills, agents, and rules defined in this repository.
Reusable AI agent skills that Claude invokes autonomously when a task matches their description. Any skill can also be invoked explicitly as a slash command (/skill-name).
| Skill | Description |
|---|---|
audit |
Run a full production audit with the code-reviewer and security-reviewer agents |
create-pull-request |
Create a GitHub PR following project conventions using gh CLI |
end-feature |
Finalize a merged PR: switch to main, pull, and remove the merged feature branch |
ddd-patterns |
DDD entities, aggregate roots, value objects, repositories, domain services, and specifications |
django-patterns |
Django architecture, REST APIs with Pydantic, ORM best practices, caching, and signals |
fix-until-green |
Loop project checks and pre-commit, dispatching a fixer subagent per failure, until green or 5 iterations |
grill-me |
Stress-test a plan or design by interviewing one question at a time across the decision tree |
investigate-sentry |
Investigate a Sentry exception down to root cause and propose a fix |
langchain-architecture |
LangChain 1.x and LangGraph for agents, memory, and tool integration |
production-code-audit |
Deep-scan a codebase and transform it to production-grade quality |
python-code-style |
Python type safety, generics, protocols, and advanced type annotations |
review-branch |
Review current branch changes for quality and security |
save-session |
Save a high-density summary of the current session to .claude_sessions.md |
start-feature |
Start the feature development pipeline |
wiki-karpathy |
Initialize, ingest, query, and lint a Karpathy-style personal wiki inside an Obsidian vault |
writing-clearly |
Clear prose for docs, commits, error messages, and UI text |
Most skills have an evals/evals.json file that defines test cases to measure skill effectiveness. To run the evals, paste the following steps into your AI agent prompt.
- Read the eval definitions in
.claude/skills/<skill>/evals/evals.json - Generate outputs - run each eval prompt twice per skill (once with the skill loaded, once without) and save the results to
.claude/skills-workspace/iteration-1/<eval-id>/with_skill/outputs/andwithout_skill/outputs/ - Create
eval_metadata.json- record the assertions from each eval's expectations array alongside references to the output files - Compare outputs in
with_skill/outputs/vswithout_skill/outputs/ - Verify each assertion from
eval_metadata.jsonagainst the corresponding output
Specialized subagents that run in isolated context windows with restricted tools.
| Agent | Description |
|---|---|
code-reviewer |
Read-only production code audit with A-F graded report (architecture, security, performance, quality, testing) |
security-reviewer |
OWASP Top 10 and Django-specific security vulnerability scanner |
plan-evaluator |
Quality gate that scores implementation plans on 7 criteria with GO/NO-GO verdict |
pr-reviewer |
End-to-end PR review: audits diff, fetches open comments, applies fixes, commits, pushes, replies, resolves threads, and verifies CI |
Path-scoped rules that load automatically only when working on matching files.
| Rule | Scope |
|---|---|
python |
**/*.py - Python 3.12+ conventions, ruff, uv, naming, imports |
performance |
**/*.py - N+1 prevention, batch writes, query-count guards, no premature caching |
django |
Django files (views, models, urls, admin, etc.) |
tests |
Test files - no comments, self-explanatory naming |
langchain |
LangChain/LangGraph files |
Plugins are split into two tiers to keep session context lean: a small global
set enabled for every session, and domain-specific plugins enabled only in the
projects that need them. All marketplaces are registered globally in
extraKnownMarketplaces of .claude/settings.json.
Enabled in enabledPlugins of the global settings:
| Plugin | Description |
|---|---|
superpowers |
Spec driven development (SDD) based on brainstorming, planning, subagent-driven execution, TDD, and code review skills |
skill-creator |
Create, modify, and benchmark custom skills, including eval runs and description optimization |
context7 |
Up-to-date documentation and code examples for any library |
caveman |
Caveman-speak mode that cuts ~75% of output tokens while keeping technical accuracy |
last30days |
Research any topic across Reddit, X, YouTube, HN, Polymarket, and the web, scored by upvotes, likes, and real money |
Enable these in the project's .claude/settings.json:
| Plugin | Description |
|---|---|
sentry-skills |
Sentry engineering skills: PR writing, code review, Django patterns, security review, and more |
notion |
Read and manage Notion pages and databases |
figma |
Read Figma designs and generate code from them |
atlassian |
Jira and Confluence: issues, backlogs, status reports, and knowledge search |
datadog-mcp |
Datadog observability: logs, metrics, traces, incidents, monitors, and dashboards |
{
"enabledPlugins": {
"figma@claude-plugins-official": true,
"sentry-skills@sentry-skills": true
}
}On a fresh machine, install the third-party plugins (the marketplaces are already registered through the tracked settings):
claude plugin marketplace add JuliusBrussee/caveman
claude plugin install caveman@caveman
claude plugin marketplace add mvanhorn/last30days-skill
claude plugin install last30days@last30days-skilldatadog-mcp is an MCP server rather than a plugin; install it with:
claude mcp add --transport http datadog-mcp https://mcp.datadoghq.eu/api/unstable/mcp-server/mcpGranola (installed via the Brewfile cask) also ships an official MCP server that exposes meeting notes and transcripts. Register it globally; the first connection opens an OAuth flow in the browser, no API key needed. Requires a signed-in Granola app (macOS 12+, Google or Microsoft account, microphone permission):
claude mcp add --transport http --scope user granola https://mcp.granola.ai/mcpTo update everything, ask Claude in a session: Update installed plugins.
CLI tools that complement Claude Code. They are installed outside the plugin system but configured from this repository.
rtk proxies common dev commands and strips
their output down to what the model needs (60-90% token savings). A
PreToolUse hook in the global settings rewrites Bash commands through it
transparently. Activate with:
rtk init -gBuilt with ❤️ from Mallorca