Day 1 Doctor automates the tedious, error-prone first-day developer machine setup. With one command, you get a fully configured development environment for any language or framework.
d1-doctor install docker python nodebrew install day1doctor/tap/d1-doctor
curl -fsSL https://install.day1.doctor | sh
git clone https://github.com/day1doctor/d1-doctor-app.git
cd d1-doctor-app
cargo build --release
# Start the daemon
d1-doctor daemon start
# Authenticate
d1-doctor auth login
# Install your first tool
d1-doctor install docker
See the Getting Started Guide for detailed instructions.
d1-doctor-app/
├── crates/
│ ├── daemon/ # Local daemon (Tokio async runtime)
│ ├── cli/ # Command-line client
│ ├── desktop/ # Tauri 2.0 desktop application
│ ├── sdk/ # Plugin SDK for third-party developers
│ └── common/ # Shared Rust utilities
├── docs/ # Documentation
├── examples/ # Example plugins
├── scripts/ # Build and install scripts
├── proto/ # Protocol Buffer definitions (submodule)
└── .github/ # GitHub CI/CD workflows
d1-doctor daemon start # Start the local daemon
d1-doctor daemon stop # Stop the daemon
d1-doctor daemon restart # Restart the daemon
d1-doctor daemon logs # View daemon logs
d1-doctor install <package> # Install a package or setup (docker, node, python, etc.)
d1-doctor diagnose # Scan your system for setup issues
d1-doctor status # Show daemon and system status
d1-doctor auth login # Authenticate with Day 1 Doctor
d1-doctor auth logout # Clear authentication token
d1-doctor credits # View credit balance and usage
d1-doctor upgrade # Upgrade Day 1 Doctor to latest version
Day 1 Doctor is a distributed system:
See Architecture Overview for detailed system design.
Extend Day 1 Doctor with custom plugins:
use d1_doctor_sdk::plugin_trait::Plugin;
use async_trait::async_trait;
pub struct MyPlugin;
#[async_trait]
impl Plugin for MyPlugin {
fn name(&self) -> &str { "my-plugin" }
fn version(&self) -> &str { "0.1.0" }
fn description(&self) -> &str { "My custom setup plugin" }
async fn execute(&self, input: serde_json::Value) -> anyhow::Result<serde_json::Value> {
// Your plugin logic
Ok(serde_json::json!({"status": "success"}))
}
}
See Plugin Development Guide and examples/ for complete examples.
./scripts/build.sh release
# Build daemon
cargo build -p d1-doctor-daemon --release
# Build CLI
cargo build -p d1-doctor-cli --release
# Build SDK
cargo build -p d1-doctor-sdk --release
cargo test --workspace
cargo fmt --all
cargo clippy --workspace --all-targets
Day 1 Doctor can install and configure:
We welcome contributions! Please see CONTRIBUTING.md for:
Day 1 Doctor is licensed under the MIT License.
Day 1 Doctor uses a credit system. You get initial credits with signup, and can purchase more as needed. The credit cost depends on the complexity of the setup task.
Yes! The daemon caches downloaded files and can operate offline for previously completed tasks. Cloud connectivity is required for new setups.
Yes. The daemon runs locally on your machine with your permission. Commands are executed locally, and only setup progress is sent to the cloud. See Privacy Policy for details.
Absolutely! Use plugins to create custom setup automation tailored to your needs. See the Plugin Development Guide.
d1-doctor diagnose to check system stated1-doctor daemon logsRUST_LOG=debug d1-doctor statusDay 1 Doctor is built with:
For help and support:
$ claude mcp add d1-doctor-app \
-- python -m otcore.mcp_server <graph>