macroclaw 0.36.0 → 0.38.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -25,7 +25,7 @@ bunx macroclaw setup
25
25
  This runs the setup wizard, which:
26
26
  1. Asks for your **Telegram bot token** (from [@BotFather](https://t.me/BotFather))
27
27
  2. Starts the bot temporarily so you can send `/chatid` to discover your chat ID
28
- 3. Asks for your **chat ID**, **model** preference, **workspace path**, and optional **OpenAI API key**
28
+ 3. Asks for your **chat ID**, **model** preference, **workspace path**, **timezone**, and optional **OpenAI API key**
29
29
  4. Saves settings to `~/.macroclaw/settings.json`
30
30
  5. Offers to install as a system service — this installs macroclaw globally (`bun install -g`), registers it as a **launchd** agent (macOS) or **systemd** unit (Linux), and starts the bridge automatically
31
31
 
@@ -43,10 +43,13 @@ Settings are stored in `~/.macroclaw/settings.json` and validated on startup.
43
43
  | `chatId` | `AUTHORIZED_CHAT_ID` | — | Yes |
44
44
  | `model` | `MODEL` | `sonnet` | No |
45
45
  | `workspace` | `WORKSPACE` | `~/.macroclaw-workspace` | No |
46
+ | `timezone` | `TIMEZONE` | `UTC` | No |
46
47
  | `openaiApiKey` | `OPENAI_API_KEY` | — | No |
47
- | `logLevel` | `LOG_LEVEL` | `debug` | No |
48
+ | `logLevel` | `LOG_LEVEL` | `info` | No |
48
49
  | `pinoramaUrl` | `PINORAMA_URL` | — | No |
49
50
 
51
+ **`timezone`** sets the agent's local timezone (IANA format, e.g. `Europe/Prague`, `America/New_York`). Used for the agent's clock display and scheduled event timing.
52
+
50
53
  **`openaiApiKey`** is used for voice message transcription via [OpenAI Whisper](https://platform.openai.com/docs/guides/speech-to-text). Without it, voice messages are ignored.
51
54
 
52
55
  Env vars take precedence over settings file values. On startup, a masked settings summary is printed showing which values were overridden by env vars.
@@ -66,7 +69,10 @@ Run `macroclaw --help` or `macroclaw <command> --help` for the complete referenc
66
69
  | `macroclaw service uninstall` | Stop and remove the system service |
67
70
  | `macroclaw service start` | Start the system service |
68
71
  | `macroclaw service stop` | Stop the system service |
72
+ | `macroclaw service restart` | Restart the system service |
69
73
  | `macroclaw service update` | Reinstall latest version and restart |
74
+ | `macroclaw service status` | Show service installation and running status |
75
+ | `macroclaw service logs` | Print the command to view service logs |
70
76
 
71
77
  ### Running as a service
72
78
 
@@ -80,7 +86,7 @@ macroclaw service install
80
86
 
81
87
  Both paths install macroclaw globally via `bun install -g`, register it as a **launchd** agent (macOS) or **systemd** unit (Linux) with auto-restart, and start the bridge.
82
88
 
83
- On Linux, the command runs as a normal user. Only the privileged operations (writing to `/etc/systemd/system/`, systemctl commands) are elevated via `sudo`, which prompts for a password when needed. Package installation and path resolution stay in the user's environment.
89
+ On Linux, the service is installed as a **systemd user unit** (`~/.config/systemd/user/`). Only `loginctl enable-linger` is elevated via `sudo` (so the service runs without an active login session). All other operations run unprivileged.
84
90
 
85
91
  ## Docker
86
92
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "macroclaw",
3
- "version": "0.36.0",
3
+ "version": "0.38.0",
4
4
  "description": "Telegram-to-Claude-Code bridge",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -73,7 +73,7 @@ Two job types, discriminated by field:
73
73
 
74
74
  | Field | Required | Description |
75
75
  |-------|----------|-------------|
76
- | `name` | yes | Short kebab-case identifier (e.g. `dentist-reminder`). Appears in the `[Context: cron/<name>]` prefix when fired. |
76
+ | `name` | yes | Short kebab-case identifier (e.g. `dentist-reminder`). Appears in the `<schedule name="...">` element and event name when fired. |
77
77
  | `cron` | for recurring | Standard cron expression (local time). See reference below. |
78
78
  | `fireAt` | for one-time | ISO 8601 timestamp (e.g. `2026-03-15T08:00:00`). Can include a timezone offset (e.g. `2026-03-15T08:00:00+01:00`); without one, the time is interpreted in the configured timezone. |
79
79
  | `prompt` | yes | The message sent to the agent when the event fires. Write it as a natural instruction. |
@@ -105,4 +105,4 @@ Common patterns:
105
105
  - Changes are hot-reloaded — no restart needed
106
106
  - File location: `<workspace>/data/schedule.json`
107
107
  - One-shot events (`fireAt`) are cleaned up automatically after firing
108
- - Missed one-shot events (e.g. service was down) are fired with a `[missed event]` prefix when the service restarts (up to 7 days late)
108
+ - Missed one-shot events (e.g. service was down) are fired when the service restarts (up to 7 days late) with `missed-by` and `scheduled-at` attributes on the `<schedule>` element
@@ -57,15 +57,6 @@ Don't ask permission. Just do it.
57
57
  - bullet points (plain text bullet character)
58
58
  - No markdown syntax. No # headings. No [links](url). No *stars*.
59
59
 
60
- ## Scheduled Events
61
-
62
- Scheduled events are created by the `schedule` skill and stored in `data/schedule.json`. Messages prefixed with `[Context: cron/<name>]` are automated scheduled events. The agent decides whether to respond:
63
-
64
- - **action: "send"** — the response goes to Telegram
65
- - **action: "silent"** — the response is logged but not sent
66
-
67
- Use `silent` when a scheduled check finds nothing new. Only send when there's something worth reading.
68
-
69
60
  ## Skills
70
61
 
71
62
  Skills live in `.claude/skills/`.