@newsails/veil-cli 1.0.1

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.
Files changed (199) hide show
  1. package/.veil/agents/analyst/AGENT.md +21 -0
  2. package/.veil/agents/analyst/agent.json +23 -0
  3. package/.veil/agents/assistant/AGENT.md +15 -0
  4. package/.veil/agents/assistant/agent.json +19 -0
  5. package/.veil/agents/coder/AGENT.md +18 -0
  6. package/.veil/agents/coder/agent.json +19 -0
  7. package/.veil/agents/hello/AGENT.md +5 -0
  8. package/.veil/agents/hello/agent.json +13 -0
  9. package/.veil/agents/writer/AGENT.md +12 -0
  10. package/.veil/agents/writer/agent.json +17 -0
  11. package/.veil/memory/MEMORY.md +343 -0
  12. package/.veil/memory/agents/analyst/MEMORY.md +55 -0
  13. package/.veil/memory/agents/hello/MEMORY.md +12 -0
  14. package/.veil/runtime.pid +1 -0
  15. package/.veil/settings.json +10 -0
  16. package/.veil-studio/studio.db +0 -0
  17. package/.veil-studio/studio.db-shm +0 -0
  18. package/.veil-studio/studio.db-wal +0 -0
  19. package/PLAN/01-vision.md +26 -0
  20. package/PLAN/02-tech-stack.md +94 -0
  21. package/PLAN/03-agents.md +232 -0
  22. package/PLAN/04-runtime.md +171 -0
  23. package/PLAN/05-tools.md +211 -0
  24. package/PLAN/06-communication.md +243 -0
  25. package/PLAN/07-storage.md +218 -0
  26. package/PLAN/08-api-cli.md +153 -0
  27. package/PLAN/09-permissions.md +108 -0
  28. package/PLAN/10-ably.md +105 -0
  29. package/PLAN/11-file-formats.md +442 -0
  30. package/PLAN/12-folder-structure.md +205 -0
  31. package/PLAN/13-operations.md +212 -0
  32. package/PLAN/README.md +23 -0
  33. package/README.md +128 -0
  34. package/REPORT.md +174 -0
  35. package/TODO.md +45 -0
  36. package/ai-tests/FRONTEND_PROMPT.md +220 -0
  37. package/ai-tests/Research & Planning.md +814 -0
  38. package/ai-tests/prompt-001-basic-api.md +230 -0
  39. package/ai-tests/prompt-002-basic-flows.md +230 -0
  40. package/ai-tests/prompt-003-agent-behaviors.md +220 -0
  41. package/api/middleware.js +60 -0
  42. package/api/routes/agents.js +193 -0
  43. package/api/routes/chat.js +93 -0
  44. package/api/routes/completions.js +122 -0
  45. package/api/routes/daemons.js +80 -0
  46. package/api/routes/memory.js +169 -0
  47. package/api/routes/models.js +40 -0
  48. package/api/routes/remote-methods.js +74 -0
  49. package/api/routes/sessions.js +208 -0
  50. package/api/routes/settings.js +108 -0
  51. package/api/routes/system.js +50 -0
  52. package/api/routes/tasks.js +270 -0
  53. package/api/server.js +120 -0
  54. package/cli/formatter.js +70 -0
  55. package/cli/index.js +443 -0
  56. package/cli/parser.js +113 -0
  57. package/config/config.json +10 -0
  58. package/config/models.json +6826 -0
  59. package/core/agent.js +329 -0
  60. package/core/cancel.js +38 -0
  61. package/core/compaction.js +176 -0
  62. package/core/events.js +13 -0
  63. package/core/loop.js +564 -0
  64. package/core/memory.js +51 -0
  65. package/core/prompt.js +185 -0
  66. package/core/queue.js +96 -0
  67. package/core/registry.js +291 -0
  68. package/core/remote-methods.js +124 -0
  69. package/core/router.js +386 -0
  70. package/core/running-sessions.js +18 -0
  71. package/docs/api/01-system.md +84 -0
  72. package/docs/api/02-agents.md +374 -0
  73. package/docs/api/03-chat.md +269 -0
  74. package/docs/api/04-tasks.md +470 -0
  75. package/docs/api/05-sessions.md +444 -0
  76. package/docs/api/06-daemons.md +142 -0
  77. package/docs/api/07-memory.md +186 -0
  78. package/docs/api/08-settings.md +133 -0
  79. package/docs/api/09-models.md +119 -0
  80. package/docs/api/09-websocket.md +350 -0
  81. package/docs/api/10-completions.md +134 -0
  82. package/docs/api/README.md +116 -0
  83. package/docs/guide/01-quickstart.md +220 -0
  84. package/docs/guide/02-folder-structure.md +185 -0
  85. package/docs/guide/03-configuration.md +252 -0
  86. package/docs/guide/04-agents.md +267 -0
  87. package/docs/guide/05-cli.md +290 -0
  88. package/docs/guide/06-tools.md +643 -0
  89. package/docs/guide/07-permissions.md +236 -0
  90. package/docs/guide/08-memory.md +139 -0
  91. package/docs/guide/09-multi-agent.md +271 -0
  92. package/docs/guide/10-daemons.md +226 -0
  93. package/docs/guide/README.md +53 -0
  94. package/docs/index.html +623 -0
  95. package/examples/README.md +151 -0
  96. package/examples/agents/assistant/AGENT.md +31 -0
  97. package/examples/agents/assistant/SOUL.md +9 -0
  98. package/examples/agents/assistant/agent.json +74 -0
  99. package/examples/agents/hello/AGENT.md +15 -0
  100. package/examples/agents/hello/agent.json +14 -0
  101. package/examples/agents/monitor/AGENT.md +51 -0
  102. package/examples/agents/monitor/agent.json +33 -0
  103. package/examples/agents/monitor/heartbeats/monitor.md +24 -0
  104. package/examples/agents/orchestrator/AGENT.md +70 -0
  105. package/examples/agents/orchestrator/agent.json +30 -0
  106. package/examples/agents/researcher/AGENT.md +52 -0
  107. package/examples/agents/researcher/agent.json +49 -0
  108. package/examples/agents/researcher/skills/web-research.md +28 -0
  109. package/examples/skills/code-review.md +72 -0
  110. package/examples/skills/summarise.md +59 -0
  111. package/examples/skills/web-research.md +42 -0
  112. package/examples/tools/word-count/index.js +27 -0
  113. package/examples/tools/word-count/tool.json +18 -0
  114. package/infrastructure/database.js +563 -0
  115. package/infrastructure/scheduler.js +122 -0
  116. package/llm/client.js +206 -0
  117. package/migrations/001-initial.sql +121 -0
  118. package/migrations/002-debuggability.sql +13 -0
  119. package/migrations/003-drop-orphaned-columns.sql +72 -0
  120. package/migrations/004-session-message-token-fields.sql +78 -0
  121. package/migrations/005-session-thinking.sql +5 -0
  122. package/package.json +30 -0
  123. package/schemas/agent.json +143 -0
  124. package/schemas/settings.json +111 -0
  125. package/scripts/fetch-models.js +93 -0
  126. package/session-debug-scenario.md +248 -0
  127. package/settings/fields.js +52 -0
  128. package/system-prompts/base-core.md +7 -0
  129. package/system-prompts/environment.md +13 -0
  130. package/system-prompts/reminders/anti-drift.md +6 -0
  131. package/system-prompts/reminders/stall-recovery.md +10 -0
  132. package/system-prompts/safety-rules.md +25 -0
  133. package/system-prompts/task-heuristics.md +27 -0
  134. package/test/client.js +71 -0
  135. package/test/integration/01-health.test.js +25 -0
  136. package/test/integration/02-agents.test.js +80 -0
  137. package/test/integration/03-chat-hello.test.js +48 -0
  138. package/test/integration/04-chat-multiturn.test.js +61 -0
  139. package/test/integration/05-chat-writer.test.js +48 -0
  140. package/test/integration/06-task-basic.test.js +68 -0
  141. package/test/integration/07-task-tools.test.js +74 -0
  142. package/test/integration/08-task-code-analysis.test.js +69 -0
  143. package/test/integration/09-memory-analyst.test.js +63 -0
  144. package/test/integration/10-task-advanced.test.js +85 -0
  145. package/test/integration/11-sessions-advanced.test.js +84 -0
  146. package/test/integration/12-assistant-chat-tools.test.js +75 -0
  147. package/test/integration/13-edge-cases.test.js +99 -0
  148. package/test/integration/14-cancel.test.js +62 -0
  149. package/test/integration/15-debug.test.js +106 -0
  150. package/test/integration/16-memory-api.test.js +83 -0
  151. package/test/integration/17-settings-api.test.js +41 -0
  152. package/test/integration/18-tool-search-activation.test.js +119 -0
  153. package/test/results/.gitkeep +0 -0
  154. package/test/runner.js +206 -0
  155. package/test/smoke.js +216 -0
  156. package/tools/agent_message.js +85 -0
  157. package/tools/agent_send.js +80 -0
  158. package/tools/agent_spawn.js +44 -0
  159. package/tools/bash.js +49 -0
  160. package/tools/edit_file.js +41 -0
  161. package/tools/glob.js +64 -0
  162. package/tools/grep.js +82 -0
  163. package/tools/list_dir.js +63 -0
  164. package/tools/log_write.js +31 -0
  165. package/tools/memory_read.js +38 -0
  166. package/tools/memory_search.js +65 -0
  167. package/tools/memory_write.js +42 -0
  168. package/tools/read_file.js +48 -0
  169. package/tools/sleep.js +22 -0
  170. package/tools/task_create.js +41 -0
  171. package/tools/task_respond.js +37 -0
  172. package/tools/task_spawn.js +64 -0
  173. package/tools/task_status.js +39 -0
  174. package/tools/task_subscribe.js +37 -0
  175. package/tools/todo_read.js +26 -0
  176. package/tools/todo_write.js +38 -0
  177. package/tools/tool_activate.js +24 -0
  178. package/tools/tool_search.js +24 -0
  179. package/tools/web_fetch.js +50 -0
  180. package/tools/web_search.js +52 -0
  181. package/tools/write_file.js +28 -0
  182. package/ui/api.js +190 -0
  183. package/ui/app.js +281 -0
  184. package/ui/index.html +382 -0
  185. package/ui/views/agents.js +377 -0
  186. package/ui/views/chat.js +610 -0
  187. package/ui/views/connection.js +96 -0
  188. package/ui/views/daemons.js +129 -0
  189. package/ui/views/feed.js +194 -0
  190. package/ui/views/memory.js +263 -0
  191. package/ui/views/models.js +146 -0
  192. package/ui/views/sessions.js +314 -0
  193. package/ui/views/settings.js +142 -0
  194. package/ui/views/tasks.js +415 -0
  195. package/utils/context.js +49 -0
  196. package/utils/id.js +16 -0
  197. package/utils/models.js +88 -0
  198. package/utils/paths.js +213 -0
  199. package/utils/settings.js +172 -0
@@ -0,0 +1,226 @@
1
+ # Daemon Agents
2
+
3
+ Daemon agents run automatically on a cron schedule. Each scheduled "tick" creates an isolated session, the agent reads its heartbeat file for instructions, runs its task (including tool calls), and the session closes.
4
+
5
+ ---
6
+
7
+ ## Use Cases
8
+
9
+ - **Monitoring** — check system metrics, alert on anomalies
10
+ - **Maintenance** — clean up temp files, rotate logs, prune old data
11
+ - **Reporting** — generate daily/weekly summaries and write them to memory
12
+ - **Data sync** — fetch external data and store it for other agents
13
+ - **Watchdogs** — check if other tasks are stuck and take action
14
+
15
+ ---
16
+
17
+ ## Configuration
18
+
19
+ Add a `daemon` mode to the agent's `agent.json`:
20
+
21
+ ```json
22
+ {
23
+ "name": "monitor",
24
+ "description": "System monitor daemon",
25
+ "model": "moonshotai/kimi-k2.5",
26
+ "modes": {
27
+ "daemon": {
28
+ "enabled": true,
29
+ "cron": "*/5 * * * *",
30
+ "maxIterations": 10,
31
+ "maxDurationSeconds": 60,
32
+ "conflictPolicy": "skip",
33
+ "heartbeatFile": ".veil/heartbeats/monitor.md",
34
+ "alertRouting": "ops-team",
35
+ "permissions": {
36
+ "allow": ["bash", "read_file", "write_file", "memory_write", "web_fetch"]
37
+ }
38
+ }
39
+ }
40
+ }
41
+ ```
42
+
43
+ ### Daemon mode fields
44
+
45
+ | Field | Type | Default | Description |
46
+ |-------|------|---------|-------------|
47
+ | `enabled` | boolean | — | Required. Must be `true`. |
48
+ | `cron` | string | — | Cron expression. Required for auto-start on server boot. |
49
+ | `maxIterations` | integer | settings default | Max LLM loop iterations per tick |
50
+ | `maxDurationSeconds` | integer | settings default | Wall-clock time limit per tick |
51
+ | `conflictPolicy` | string | `"skip"` | What to do if a tick fires while the previous one is still running |
52
+ | `heartbeatFile` | string | `.veil/heartbeats/<name>.md` | Path to the instructions file read each tick |
53
+ | `alertRouting` | string \| string[] | — | Agent(s) to notify on tick error |
54
+
55
+ ### Conflict policies
56
+
57
+ | Policy | Behaviour |
58
+ |--------|-----------|
59
+ | `skip` | Ignore the new tick if one is already running (default) |
60
+ | `queue` | Queue the tick; run it once the current one finishes |
61
+ | `restart` | Cancel the running tick and start a fresh one |
62
+
63
+ ---
64
+
65
+ ## Cron Schedule Syntax
66
+
67
+ VeilCLI uses standard 5-field cron expressions:
68
+
69
+ ```
70
+ * * * * *
71
+ │ │ │ │ └── day of week (0-7, 0=Sunday)
72
+ │ │ │ └──── month (1-12)
73
+ │ │ └────── day of month (1-31)
74
+ │ └──────── hour (0-23)
75
+ └────────── minute (0-59)
76
+ ```
77
+
78
+ Common examples:
79
+
80
+ | Expression | Meaning |
81
+ |------------|---------|
82
+ | `*/5 * * * *` | Every 5 minutes |
83
+ | `0 * * * *` | Every hour (on the hour) |
84
+ | `0 9 * * 1-5` | 9 AM, Monday–Friday |
85
+ | `0 0 * * *` | Midnight every day |
86
+ | `*/30 9-17 * * 1-5` | Every 30 min, 9 AM–5 PM, weekdays |
87
+ | `0 0 1 * *` | First of every month, midnight |
88
+
89
+ ---
90
+
91
+ ## Heartbeat File
92
+
93
+ The heartbeat file contains the instructions the daemon reads at the start of each tick. It is plain Markdown.
94
+
95
+ Default location: `.veil/heartbeats/<agent-name>.md`
96
+
97
+ If the file does not exist, the daemon uses the default instruction:
98
+ ```
99
+ You are running a scheduled daemon tick. Check your heartbeat file and perform your scheduled duties.
100
+ ```
101
+
102
+ Example heartbeat file (`.veil/heartbeats/monitor.md`):
103
+ ```markdown
104
+ # System Monitor — Tick Instructions
105
+
106
+ Each tick, perform these checks in order:
107
+
108
+ 1. Run `df -h /` to check disk usage
109
+ 2. Run `free -m` to check memory usage
110
+ 3. Run `uptime` to get load averages
111
+ 4. If disk usage > 90%, write a warning to global memory
112
+ 5. If load average > 4.0, write a warning to global memory
113
+ 6. Write a brief summary of all findings to global memory with today's date
114
+
115
+ Keep your response concise. Only escalate to the ops-team agent if a threshold is exceeded.
116
+ ```
117
+
118
+ Update the heartbeat file at any time to change what the daemon does — no server restart required.
119
+
120
+ ---
121
+
122
+ ## Auto-start on Server Boot
123
+
124
+ Daemons with a `cron` field are **auto-started** when `veil start` runs. No manual intervention needed.
125
+
126
+ ```bash
127
+ veil start
128
+ # VeilCLI v0.1.0 started on port 5050
129
+ # Auto-started daemon: monitor
130
+ # Auto-started daemon: cleanup
131
+ ```
132
+
133
+ ---
134
+
135
+ ## Manual Control via API
136
+
137
+ Start, stop, and trigger daemons without restarting the server:
138
+
139
+ ```bash
140
+ # Start scheduling
141
+ curl -X POST http://localhost:5050/agents/monitor/daemon/start
142
+
143
+ # Stop scheduling
144
+ curl -X POST http://localhost:5050/agents/monitor/daemon/stop
145
+
146
+ # Trigger an immediate tick (async — returns right away)
147
+ curl -X POST http://localhost:5050/agents/monitor/daemon/trigger
148
+
149
+ # Check active daemons
150
+ curl http://localhost:5050/daemons
151
+ ```
152
+
153
+ See [Daemons API reference](../api/06-daemons.md).
154
+
155
+ ---
156
+
157
+ ## Daemon Session Lifecycle
158
+
159
+ Each tick:
160
+ 1. A new session is created (`mode: "daemon"`)
161
+ 2. The heartbeat file is read
162
+ 3. The agent runs its loop (LLM + tool calls)
163
+ 4. The session is closed
164
+ 5. The result is available in the sessions list
165
+
166
+ Daemon sessions are short-lived and auto-closed. Do not try to continue a daemon session via the chat endpoint.
167
+
168
+ ---
169
+
170
+ ## Complete Example: Daily Summary Daemon
171
+
172
+ **`.veil/agents/summariser/agent.json`**:
173
+ ```json
174
+ {
175
+ "name": "summariser",
176
+ "description": "Daily project activity summariser",
177
+ "model": "moonshotai/kimi-k2.5",
178
+ "modes": {
179
+ "daemon": {
180
+ "enabled": true,
181
+ "cron": "0 18 * * 1-5",
182
+ "maxIterations": 8,
183
+ "maxDurationSeconds": 90,
184
+ "conflictPolicy": "skip",
185
+ "permissions": {
186
+ "allow": ["read_file", "list_dir", "bash", "memory_read", "memory_write"]
187
+ }
188
+ }
189
+ }
190
+ }
191
+ ```
192
+
193
+ **`.veil/agents/summariser/AGENT.md`**:
194
+ ```markdown
195
+ You are Summariser, an agent that runs at 6 PM on weekdays.
196
+
197
+ Your job is to:
198
+ 1. Read today's task history from memory
199
+ 2. List any recently modified files in $PROJECT_ROOT
200
+ 3. Write a brief daily summary to global memory
201
+
202
+ Keep summaries factual and concise (3-5 bullet points max).
203
+ ```
204
+
205
+ **`.veil/heartbeats/summariser.md`**:
206
+ ```markdown
207
+ # Daily Summary — 6 PM Run
208
+
209
+ 1. Run `git log --oneline --since="24 hours ago"` to see today's commits
210
+ 2. Check global memory for any notes added today
211
+ 3. Write a daily summary entry to global memory including:
212
+ - Number of commits
213
+ - Key changes (from commit messages)
214
+ - Any flagged issues from memory
215
+ ```
216
+
217
+ **Start the server** — daemon auto-starts:
218
+ ```bash
219
+ veil start
220
+ # Auto-started daemon: summariser
221
+ ```
222
+
223
+ **Or trigger manually**:
224
+ ```bash
225
+ curl -X POST http://localhost:5050/agents/summariser/daemon/trigger
226
+ ```
@@ -0,0 +1,53 @@
1
+ # VeilCLI — Project Guide
2
+
3
+ This guide covers everything you need to set up, configure, and operate VeilCLI.
4
+
5
+ ---
6
+
7
+ ## Contents
8
+
9
+ | Doc | Topic |
10
+ |-----|-------|
11
+ | [01-quickstart.md](01-quickstart.md) | Install, create your first agent, run your first request |
12
+ | [02-folder-structure.md](02-folder-structure.md) | The `.veil/` workspace layout explained |
13
+ | [03-configuration.md](03-configuration.md) | `settings.json` + `auth.json` — every field |
14
+ | [04-agents.md](04-agents.md) | `agent.json`, `AGENT.md`, and all 4 agent modes |
15
+ | [05-cli.md](05-cli.md) | `veil` CLI commands reference |
16
+ | [06-tools.md](06-tools.md) | All 24 built-in tools |
17
+ | [07-permissions.md](07-permissions.md) | Tool permission system — allow/deny/ask |
18
+ | [08-memory.md](08-memory.md) | Persistent memory and context compaction |
19
+ | [09-multi-agent.md](09-multi-agent.md) | Multi-agent orchestration patterns |
20
+ | [10-daemons.md](10-daemons.md) | Daemon / cron agents |
21
+
22
+ ---
23
+
24
+ ## Architecture Overview
25
+
26
+ ```
27
+ ┌─────────────────────────────────────────┐
28
+ │ REST API (Express) │
29
+ │ /agents /tasks /sessions /daemons │
30
+ └──────────────────┬──────────────────────┘
31
+
32
+ ┌──────────────────▼──────────────────────┐
33
+ │ Core Runtime │
34
+ │ router.js → loop.js → tool registry │
35
+ │ prompt assembly → LLM client │
36
+ └──────────┬────────────────┬────────────┘
37
+ │ │
38
+ ┌──────────▼──────┐ ┌──────▼──────────┐
39
+ │ SQLite (db) │ │ File system │
40
+ │ sessions │ │ .veil/agents/ │
41
+ │ tasks │ │ .veil/memory/ │
42
+ │ messages │ │ .veil/auth.json│
43
+ │ events │ │ settings.json │
44
+ │ todos │ └─────────────────┘
45
+ └─────────────────┘
46
+ ```
47
+
48
+ **Key concepts:**
49
+ - **Workspace** — any directory with a `.veil/` folder. One server instance per workspace.
50
+ - **Agent** — a folder in `.veil/agents/<name>/` with `agent.json` + `AGENT.md`.
51
+ - **Session** — a conversation thread. Created automatically per chat turn or task run.
52
+ - **Task** — an async agent run. Returns a `taskId` immediately; poll for completion.
53
+ - **Daemon** — an agent that runs on a cron schedule.