Skip to content

Troubleshooting

Skills don't show up in Claude Code

aweek's SessionStart hook runs npm install -g aweek on first launch. If that step failed, the skills won't be able to invoke the aweek CLI and aweek [name] will silently no-op.

bash
npm install -g aweek
which aweek

If which aweek prints nothing, the global npm bin directory may not be on $PATH. Add it:

bash
echo 'export PATH="$(npm prefix -g)/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc

Restart Claude Code so it re-reads $PATH.

Heartbeat isn't running

The launchd user agent is the heartbeat's only execution path on macOS. Check whether it's loaded:

bash
launchctl list | grep io.aweek.heartbeat

If nothing matches, the plist was never installed (or was removed). Run aweek setup (or invoke any other skill — it will auto-prompt) and confirm the heartbeat install when asked.

To inspect the plist on disk:

bash
ls ~/Library/LaunchAgents/io.aweek.heartbeat.*.plist

The label includes a hash of the project directory, so multiple aweek installs coexist on one machine without collision.

Agent paused

aweek pauses an agent when its weekly token budget is exhausted. Clear the pause via:

text
aweek manage
  • resume — clears the pause. The agent picks up at the next Monday budget reset.
  • top-up — resets weekly usage to 0 immediately. Destructive — confirms first.

OAuth / Keychain errors in heartbeat logs

The reason aweek uses launchd (not cron) on macOS is that cron-spawned processes can't reach the user's Keychain, so Claude Code's OAuth subscription tokens are invisible to a cron-launched claude. If you see auth errors in the heartbeat log, confirm the agent is running under launchd, not from a cron entry:

bash
launchctl list | grep io.aweek.heartbeat
crontab -l | grep aweek    # should be empty on macOS

If a stale crontab entry exists from an older install, remove it.

Time-zone drift warnings

launchd fires in the system local zone. aweek logs a one-line warning each tick if the configured .aweek/config.json#timeZone diverges from the detected system zone. Either:

  • Edit .aweek/config.json#timeZone to match the host, or
  • Change the system time zone.

Stale lock files

The heartbeat takes a project-level lock plus per-agent locks under .aweek/.locks/. On a clean shutdown they're removed; on a crash they may linger. The locks are PID-tracked, so a stale lock from a crashed previous tick auto-clears on the next tick — manual cleanup is only necessary if a lock points at a still-living unrelated process.

bash
ls .aweek/.locks/

Removing aweek from a project

Use /aweek:teardown to cleanly uninstall. It offers two options:

  • Remove heartbeat only — unloads and deletes the launchd plist (macOS) or removes the crontab entry. Agent data stays on disk.
  • Full uninstall — removes the heartbeat AND deletes .aweek/ permanently.

Both require explicit confirmation before any change is made.

text
aweek teardown

Anything else

  • File an issue at github.com/runbear-io/aweek/issues.
  • Include the output of launchctl list | grep io.aweek.heartbeat, the contents of .aweek/config.json, and the last few lines from the affected agent's activity log (visible in aweek serve).

Released under the Apache 2.0 License.