AgentTutor is a macOS desktop setup assistant for Apple Silicon developer machines.
It runs a guided setup flow, installs a curated toolchain, verifies each component, and stops immediately on failures with remediation guidance.
- 6-stage SwiftUI setup wizard: welcome -> OpenAI config -> component selection -> install -> Git/SSH -> completion
- Manifest-driven install catalog (
InstallCatalog) with dependency resolution (InstallPlanner) - Preflight + post-install verification checks for every install item
- Fail-fast execution with remediation advice (
heuristicsfirst, OpenAI fallback throughgpt-5.1-codex-mini) - User-approved remediation command execution with safety filtering (
CommandSafety) - Post-install Git identity setup (
git config --global user.name/user.email) and SSH key management (~/.ssh/id_ed25519) - GitHub auth policy is centralized and uses SSH git protocol end-to-end
- Session JSONL logs in
~/Library/Application Support/AgentTutor/logs/ - API key is in-memory only and never written to disk
- Installation start must be blocked unless API key/base URL validation succeeds.
- Environment baseline is Homebrew
node@22+ Homebrewpython@3.10. nvmremains in Core CLI as an optional future-development tool, not a baseline environment requirement.
- macOS 14+
- Apple Silicon (M1+)
- Xcode 16+ (CI currently runs Xcode 16.4 image)
- OpenAI API key/base URL validation is required before install can start
AgentTutor/
├── Core/
│ ├── SetupModels.swift
│ ├── Install/
│ │ ├── InstallCatalog.swift
│ │ ├── InstallPlanner.swift
│ │ ├── ShellExecutor.swift
│ │ └── InstallLogger.swift
│ └── AI/
│ └── RemediationAdvisor.swift
├── Features/Setup/
│ ├── SetupFlowView.swift
│ └── SetupViewModel.swift
├── Scripts/
│ ├── build.sh
│ ├── test.sh
│ ├── package_app.sh
│ └── release.sh
└── .github/workflows/
├── ci.yml
└── tag-release.yml
Single source of truth: AgentTutor/Core/Install/InstallCatalog.swift.
| Item | Required | Default Selected | Category |
|---|---|---|---|
| Xcode Command Line Tools | Yes | Yes | System |
| Homebrew | Yes | Yes | System |
Core CLI Tools (rg, fd, jq, yq, gh, uv, nvm) |
Yes | Yes | CLI Tools |
Node.js 22 LTS (node@22 via Homebrew) |
No | Yes | Runtimes |
Python 3.10 (python@3.10 via Homebrew) |
No | Yes | Runtimes |
| Visual Studio Code | No | Yes | Desktop Apps |
| Codex CLI | No | Yes | Desktop Apps |
| GitHub CLI Login | Yes | Yes | Authentication |
# Open project
open AgentTutor.xcodeproj
# Build
./Scripts/build.sh --configuration Debug
# Unit tests (default scope)
./Scripts/test.sh --unit
# Full scheme tests (includes UI tests)
./Scripts/test.sh --all
# Package release artifacts
./Scripts/package_app.sh --configuration ReleaseBy default scripts produce output under Build/:
Build/DerivedDataBuild/TestResults/*.xcresultBuild/Artifacts/AgentTutor-<version>-<build>/
For unsigned CI-style builds on machines without signing identities:
AGENTTUTOR_DISABLE_CODE_SIGNING=1 ./Scripts/build.sh --configuration Debug# Local release flow (build + unit test + package)
./Scripts/release.sh --configuration Release
# Local notarize + GitHub release publish
./Scripts/release.sh --configuration Release --notarize --publish --tag v1.0.0Detailed release procedures and credential requirements: docs/RELEASING.md.
CI(.github/workflows/ci.yml)- Trigger: PR to
main, push tomain, manual dispatch - Steps: script syntax check, debug build, unit test, packaging smoke test
- Uploads test results and packaging artifacts (when present)
- Trigger: PR to
Tag Release(.github/workflows/tag-release.yml)- Trigger: push tag
v* - Guard: tag must equal
v<MARKETING_VERSION> - Steps: unit tests, release packaging, upload workflow artifacts, publish GitHub Release assets
- Trigger: push tag
Both workflows run with AGENTTUTOR_DISABLE_CODE_SIGNING=1.
Private project.
