Skip to content

bug: setup --yes crashes on Linux because scheduled automation is macOS/launchd-only #31

Description

@Priyanshubhartistm

What happened?

The README quickstart (curl -fsSL https://codealmanac.com/install.sh | sh then codealmanac setup --yes) fails on Linux. Setup writes config, installs instructions, writes a macOS launchd plist into ~/Library/LaunchAgents/ (on a Linux box), then dies:

codealmanac: launchctl bootstrap failed for com.codealmanac.sync: [Errno 2] No such file or directory: 'launchctl'

Exit code is 1 and the machine is left in a half-configured state:
~/.codealmanac/config.toml is written, agent instructions are installed, and an orphan com.codealmanac.sync.plist sits in ~/Library/LaunchAgents/ where nothing will ever read it.

The cause: create_app() wires AutomationService with LaunchdSchedulerAdapter unconditionally (src/codealmanac/app.py), and the adapter shells out to launchctl
(src/codealmanac/integrations/automation/scheduler/launchd.py). There is no platform check anywhere in the setup/automation path. The repo's own wiki already acknowledges this: almanac/architecture/setup/automation-and-update.md says "the production setup and automation path is macOS-specific until another scheduler adapter is added and wired" — but the README, PyPI metadata
(Operating System :: OS Independent), and setup output say nothing about it.

What did you expect?

One of:

  • setup --yes detects a non-macOS platform, skips scheduled automation with a clear message ("scheduled automation is macOS-only for now, skipping sync/ garden/update schedules"), and still exits 0 with everything else installed, or - a hard, early, actionable error before any files are written, plus README docs saying automation requires macOS.

Either way, no plist should be written to ~/Library/LaunchAgents/ on Linux, and the quickstart should not crash on a supported Python platform.

Reproduction

# On any Linux machine, with the default runner (codex) installed and logged in:
codealmanac setup --yes
# -> codealmanac: launchctl bootstrap failed for com.codealmanac.sync: [Errno 2] No such file or directory: 'launchctl'

# Or without any runner at all:
codealmanac automation install sync --every 5h
# -> same failure, and ~/Library/LaunchAgents/com.codealmanac.sync.plist is left behind

Environment

  • OS: Ubuntu 24.04 (Linux 6.8)
  • Python version: 3.12.3
  • CodeAlmanac version: 0.3.7
  • Install method: local checkout (uv run), also reproduces from PyPI install
  • Agent provider, if relevant: Codex
  • Almanac root, if relevant: almanac/

Logs or output

$ codealmanac automation install sync --every 5h
codealmanac: launchctl bootstrap failed for com.codealmanac.sync: [Errno 2] No such file or directory: 'launchctl'
$ echo $?
1
$ ls ~/Library/LaunchAgents
com.codealmanac.sync.plist

Extra context

The partial-state problem makes this worse than a plain unsupported-platform error: setup completes config + instructions, then fails on the first automation task, so sync never gets scheduled and the user has no idea whether the rest of setup took effect. A minimal fix (platform guard in setup task selection + README note) keeps the door open for a later cron/systemd scheduler adapter behind the same SchedulerAdapter port.


Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions