Blackdot: A Development Framework Built for Claude Code and Modern Development
Blackdot: Modular development framework with Claude Code session portability, multi-vault secrets, developer tool integration (AWS/Rust/Go/Python), extensible hooks, and feature-based control. Built for developers who work across machines.
- tags
- #Blackdot #Dotfiles #Claude-Code #Development-Environment #Framework #Automation #Zsh #Rust #Go #Python #Aws
- categories
- Developer-Tools
- published
- reading time
- 9 minutes
Start on Mac, continue on Linux, same Claude conversation.
That’s how this started.
I solved it with a simple /workspace → ~/workspace symlink so Claude sees the same absolute path everywhere.
But the real outcome wasn’t just portability. It was a new way to treat configuration as a framework–Blackdot: a feature registry, multi-vault secrets, layered configuration, and an extensible hook system–all fully opt-in, with no need to fork the core.
This works great on a single Linux machine too. The framework’s modularity, vault system, hooks, and dev tool integrations stand on their own.
The Problem That Started It
I use Claude Code across three machines: Mac laptop, Lima VM, and WSL2. Claude stores sessions by working directory path. /Users/me/api on Mac and /home/me/api on Linux are different sessions–different paths mean lost conversation history.
I found this article about migrating Claude sessions and started writing path rewriting scripts. After a few hours, I realized there was a simpler way.
The Solution: Root-Level Symlink
| |
Now /workspace/api resolves correctly on every machine, but Claude sees the same absolute path. Same path = same session folder = conversation continues.
| |
From a Portability Hack to a Framework
The /workspace trick solved a real problem. The bigger discovery was that configuration can be a control plane: features, hooks, layered config, and vault-backed state–without forks.
That solved Claude portability. But while building this, I needed:
- Secrets synced without storing in git (SSH keys, AWS credentials)
- Shell config that didn’t break when switching contexts
- Developer tools (AWS, Rust, Go, Python) with consistent aliases
- Health checks to catch broken configs
- Extensibility without editing core code
That became a framework.
The Control Plane: Features + Hooks + Layers
Everything optional is a feature. Enable what you need, skip what you don’t.
| |
Feature Categories
Core (always enabled):
- Shell configuration (ZSH, prompt, core aliases)
Optional (framework capabilities):
workspace_symlink-/workspacefor portable Claude sessionsclaude_integration- Claude Code hooks and settingsvault- Multi-vault secrets (Bitwarden/1Password/pass)templates- Machine-specific configs with filtershooks- Lifecycle event system (multiple trigger points)config_layers- Hierarchical config (env > project > machine > user)drift_check- Detect unsync’d changes before overwritingbackup_auto- Automatic backups before destructive ops
Integrations (developer tools):
aws_helpers- AWS SSO profiles, helpers, tab completioncdk_tools- AWS CDK aliases and environment managementrust_tools- Cargo aliases, clippy, watch, coveragego_tools- Go build/test/lint helperspython_tools- uv integration, pytest aliases, auto-venvnvm_integration- Lazy-loaded Node.js version managementsdkman_integration- Java/Gradle/Kotlin version managementmodern_cli- eza, bat, ripgrep, fzf, zoxide
Dependencies auto-resolve. Enable claude_integration and it enables workspace_symlink automatically.
Hook System: Opt-In Automation
Hooks are opt-in automation, not hidden magic. You can list, validate, and run each hook manually.
The hook system triggers custom scripts at multiple lifecycle points:
| |
Example: Auto-activate Python venv on cd
| |
Hooks auto-discover from ~/hooks/ and .blackdot-hooks/ in project directories. Priority-based execution (00-99, lower runs first).
| |
No core file edits needed. Drop scripts in hooks/, they run automatically.
Configuration Layers
Hierarchical config resolution with 5 layers:
| |
Project configs (.blackdot.json) travel with repos. Machine configs (~/.config/blackdot/machine.json) stay local.
Optional Integrations: AWS/Rust/Go/Python
The framework includes dozens of curated aliases and helpers for common development workflows. All tools are optional integrations–enable only what you use.
AWS & CDK
| |
Rust Development
| |
Go Development
| |
Python with uv
Built on uv for fast Python package management.
| |
Vault System: Multi-Backend Secrets
Your SSH keys already live in your password manager. Use them directly.
| |
Drift detection warns before overwriting:
⚠ Drift detected:
• SSH-GitHub-Personal
Vault: SHA256:abc...
Local: SHA256:def...
Overwrite local with vault? [y/N]:
Secrets never touch git. The vault system uses your existing password manager.
Setup Wizard
The current wizard flow walks through 7 steps:
| |
Each step is optional. Exit anytime, resume later with blackdot setup.
Package Tiers
Choose your installation size:
| Tier | Packages | Time | What’s Included |
|---|---|---|---|
| Minimal | 18 | ~2 min | Essentials (git, zsh, jq) |
| Enhanced | 43 | ~5 min | Modern CLI tools (recommended) |
| Full | 61 | ~10 min | Everything including Docker, Node |
The wizard presents this interactively. Your choice persists in config.
Modular Shell Config
Instead of one 1000-line .zshrc, there are modular files in zsh.d/:
zsh/zsh.d/
├── 00-init.zsh # Core initialization
├── 10-environment.zsh # ENV vars
├── 20-history.zsh # History config
├── 30-completion.zsh # Tab completion
├── 40-aliases.zsh # Aliases
├── 50-aws.zsh # AWS helpers (if aws_helpers enabled)
├── 51-rust.zsh # Rust tools (if rust_tools enabled)
└── 90-hooks.zsh # Hook system integration
Each module handles one thing. Disable per-machine by symlinking to .skip:
| |
Modules load in order (00-99). Feature guards prevent loading disabled integrations.
What Makes This Different
Most dotfiles: Configuration files + install script.
Blackdot:
- Feature Registry - Modular control plane for all optional components
- Hook System - Extensible automation at multiple lifecycle points
- Multi-Vault - Unified API for Bitwarden/1Password/pass
- Developer Tools - Integrated AWS/Rust/Go/Python with curated aliases
- Configuration Layers - Hierarchical resolution (env > project > machine)
- Drift Detection - Warns before overwriting unsync’d changes
- Template Filters -
{{ var | upper }}pipeline transformations - Health Checks - Validates everything, auto-fixes common issues
- Claude Portability -
/workspacesymlink for session sync
Designed for developers who want consistency and control.
Integration with dotclaude
dotclaude and blackdot are independent. They integrate cleanly through shared assumptions like /workspace and feature gating, but neither requires the other.
- dotclaude - Manages Claude configuration (CLAUDE.md, agents, settings)
- blackdot - Manages secrets, shell, and development environment
Both respect /workspace for portable sessions. Switch Claude contexts with dotclaude while secrets stay synced via blackdot vault.
Who This Is For
This framework works best if you:
- Want a modular dotfiles system you can grow over time
- Prefer opt-in features instead of monolithic installs
- Need vault-backed secrets without committing anything to git
- Like automation you can understand and control (hooks + doctor)
- Use AWS/Rust/Go/Python and want consistent helpers
If you also use Claude Code or work across machines, the /workspace portability becomes a genuinely great bonus.
If you don’t use Claude or don’t switch machines, you still get a clean feature registry, hooks, vault-backed secrets, and layered config.
Try Before You Trust
Test in a disposable container first (if you publish the lite image):
| |
30-second verification before running on your real machine.
Get Started
| |
The wizard detects your platform, finds available vault CLIs, and prompts for choices. Takes ~2–10 minutes depending on tier selection.
Started minimal? Add features later:
| |
Full documentation at blackwell-systems.github.io/blackdot .
Code: github.com/blackwell-systems/blackdot Docs: blackwell-systems.github.io/blackdot Changelog: CHANGELOG.md License: MIT