macOS · launchd · MCP

Quiet home for your Mac’s automations.

Launchy is a SwiftUI app that lets humans and AI agents safely browse, create, and diagnose launchd jobs — with every change reviewed before it touches the system.

No signed binary yet — the friendly, auditable build script is the entrance.

What it does

A calm GUI for the unix machinery underneath.

Ownership-aware list

Jobs are split into Launchy-managed, other apps, and system sections so you always know who owns what.

MCP server built in

list_jobs, read_logs, and create_job are exposed over JSON-RPC for any MCP-compatible AI client.

Human-in-the-loop approval

AI-proposed jobs land in ~/.launchy/pending/. Diff the plist, then approve or reject from the app.

Per-job .app bundles

Approved jobs are materialized as their own apps so they show up cleanly in Login Items & Extensions.

Diagnosis & bug-report handoff

Inspect a failing job, then generate a ready-to-paste prompt — logs, plist, and context — for your favorite AI agent.

Sage design system

A calm Sage palette, soft rounded corners, and shared components keep every screen consistent and quiet.

MCP integration

AI proposes. A human opens the door.

LaunchyMCP speaks newline-delimited JSON-RPC over stdio. Wire it into Claude Code, Cursor, or any MCP-aware client by registering the binary path.

  • create_job never registers with launchd directly — it writes a pending JSON file for the human to review.
  • list_jobs aggregates entries from ~/Library/LaunchAgents and launchctl list.
  • read_logs tails stdout and stderr so an agent can reason about failures.
printf '%s\n' \
  '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}' \
  '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}' \
  '{"jsonrpc":"2.0","id":3,"method":"tools/call",
    "params":{"name":"list_jobs","arguments":{}}}' \
  | LaunchyMCP

# → serverInfo.name = "launchy"
# → tools = [list_jobs, read_logs, create_job]

For AI-agent-driven developers

Designed for people who can already write a plist — and would rather not.

If you live in Claude Code, Cursor, or Raycast all day, Launchy stays out of your way. It gives launchd jobs a place to live, surfaces failures when they need attention, and keeps the safety guardrails between the AI and your machine.

No mascot. No neon. No terminal cosplay. Just a quiet room where small automations can run for a long time.

Roadmap

Shipping in small, calm steps.

Shipped

  • v0.1 GUI MVP — list, create, start/stop, log view, three templates.
  • v0.2 MCP server, pending-job approval UI, plist diff view.
  • v0.3 AI templates, Keychain-backed secrets, natural-language schedule, error diagnosis.
  • v0.4 Per-job .app bundles, LaunchyJobRunner, edit-existing-jobs round-trip.
  • v0.5 Ownership sections, isLoaded state, argument parser, Bug Report AI handoff, Design System v0.1.

Planned (v0.6+)

  • Signed .app distribution via GitHub Releases.
  • Homebrew Cask formula.
  • Job execution history and richer log timeline.
  • Stronger safety review for AI-proposed jobs.
  • English UI localization.