zilmate 1.7.2 → 1.7.6
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/.env.example +36 -36
- package/README.md +503 -503
- package/SDK.md +320 -320
- package/agent-docs.md +276 -276
- package/dist/agents/automation-planner.agent.d.ts.map +1 -1
- package/dist/agents/coding.agent.d.ts +18 -0
- package/dist/agents/coding.agent.d.ts.map +1 -1
- package/dist/agents/finance.agent.d.ts +60 -0
- package/dist/agents/finance.agent.d.ts.map +1 -0
- package/dist/agents/finance.agent.js +30 -0
- package/dist/agents/finance.agent.js.map +1 -0
- package/dist/agents/manager.d.ts +94 -1
- package/dist/agents/manager.d.ts.map +1 -1
- package/dist/agents/manager.js +102 -36
- package/dist/agents/manager.js.map +1 -1
- package/dist/agents/swarm/engineering/qa.d.ts +3 -0
- package/dist/agents/swarm/engineering/qa.d.ts.map +1 -0
- package/dist/agents/swarm/engineering/qa.js +19 -0
- package/dist/agents/swarm/engineering/qa.js.map +1 -0
- package/dist/agents/swarm/growth/seo.d.ts +3 -0
- package/dist/agents/swarm/growth/seo.d.ts.map +1 -0
- package/dist/agents/swarm/growth/seo.js +19 -0
- package/dist/agents/swarm/growth/seo.js.map +1 -0
- package/dist/agents/swarm/main.d.ts +22 -0
- package/dist/agents/swarm/main.d.ts.map +1 -0
- package/dist/agents/swarm/main.js +65 -0
- package/dist/agents/swarm/main.js.map +1 -0
- package/dist/agents/swarm/operations/finance.d.ts +3 -0
- package/dist/agents/swarm/operations/finance.d.ts.map +1 -0
- package/dist/agents/swarm/operations/finance.js +19 -0
- package/dist/agents/swarm/operations/finance.js.map +1 -0
- package/dist/agents/swarm/registry.d.ts +4 -0
- package/dist/agents/swarm/registry.d.ts.map +1 -0
- package/dist/agents/swarm/registry.js +361 -0
- package/dist/agents/swarm/registry.js.map +1 -0
- package/dist/cli/chat.d.ts +2 -0
- package/dist/cli/chat.d.ts.map +1 -0
- package/dist/cli/chat.js +61 -0
- package/dist/cli/chat.js.map +1 -0
- package/dist/cli/composer.d.ts.map +1 -1
- package/dist/cli/composer.js +54 -4
- package/dist/cli/composer.js.map +1 -1
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +13 -0
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/format.d.ts.map +1 -1
- package/dist/cli/format.js +46 -53
- package/dist/cli/format.js.map +1 -1
- package/dist/cli/interactive.d.ts.map +1 -1
- package/dist/cli/interactive.js +51 -6
- package/dist/cli/interactive.js.map +1 -1
- package/dist/cli/models.d.ts +1 -1
- package/dist/cli/models.d.ts.map +1 -1
- package/dist/cli/models.js +21 -21
- package/dist/cli/models.js.map +1 -1
- package/dist/cli/prompt.d.ts +2 -2
- package/dist/cli/prompt.d.ts.map +1 -1
- package/dist/cli/prompt.js +58 -14
- package/dist/cli/prompt.js.map +1 -1
- package/dist/cli/render.d.ts.map +1 -1
- package/dist/cli/render.js +25 -17
- package/dist/cli/render.js.map +1 -1
- package/dist/cli/setup.d.ts +1 -0
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +74 -2
- package/dist/cli/setup.js.map +1 -1
- package/dist/cli/swarm.d.ts +4 -0
- package/dist/cli/swarm.d.ts.map +1 -0
- package/dist/cli/swarm.js +21 -0
- package/dist/cli/swarm.js.map +1 -0
- package/dist/cli/theme.d.ts +67 -1
- package/dist/cli/theme.d.ts.map +1 -1
- package/dist/cli/theme.js +66 -4
- package/dist/cli/theme.js.map +1 -1
- package/dist/cli/tunnel.d.ts.map +1 -1
- package/dist/cli/tunnel.js +2 -1
- package/dist/cli/tunnel.js.map +1 -1
- package/dist/cli/voice.js +11 -11
- package/dist/cli/welcome.d.ts.map +1 -1
- package/dist/cli/welcome.js +2 -0
- package/dist/cli/welcome.js.map +1 -1
- package/dist/config/model-store.d.ts +1 -1
- package/dist/config/model-store.d.ts.map +1 -1
- package/dist/config/model-store.js +14 -1
- package/dist/config/model-store.js.map +1 -1
- package/dist/config/models.d.ts +7 -0
- package/dist/config/models.d.ts.map +1 -1
- package/dist/config/models.js +30 -6
- package/dist/config/models.js.map +1 -1
- package/dist/documents/pdf.d.ts.map +1 -1
- package/dist/documents/pdf.js +143 -41
- package/dist/documents/pdf.js.map +1 -1
- package/dist/index.js +19 -1
- package/dist/index.js.map +1 -1
- package/dist/jobs/anomaly.js +5 -5
- package/dist/memory/heal.js +43 -43
- package/dist/observability/doctor.d.ts +3 -0
- package/dist/observability/doctor.d.ts.map +1 -0
- package/dist/observability/doctor.js +33 -0
- package/dist/observability/doctor.js.map +1 -0
- package/dist/observability/usage.d.ts +13 -0
- package/dist/observability/usage.d.ts.map +1 -0
- package/dist/observability/usage.js +34 -0
- package/dist/observability/usage.js.map +1 -0
- package/dist/runtime/chat-bridge.d.ts +32 -0
- package/dist/runtime/chat-bridge.d.ts.map +1 -0
- package/dist/runtime/chat-bridge.js +92 -0
- package/dist/runtime/chat-bridge.js.map +1 -0
- package/dist/runtime/confirm.d.ts.map +1 -1
- package/dist/runtime/confirm.js +12 -2
- package/dist/runtime/confirm.js.map +1 -1
- package/dist/runtime/progress.d.ts.map +1 -1
- package/dist/runtime/progress.js +3 -1
- package/dist/runtime/progress.js.map +1 -1
- package/dist/runtime/prompts/builder.d.ts +11 -0
- package/dist/runtime/prompts/builder.d.ts.map +1 -0
- package/dist/runtime/prompts/builder.js +29 -0
- package/dist/runtime/prompts/builder.js.map +1 -0
- package/dist/runtime/registry.d.ts +14 -0
- package/dist/runtime/registry.d.ts.map +1 -0
- package/dist/runtime/registry.js +39 -0
- package/dist/runtime/registry.js.map +1 -0
- package/dist/runtime/storage/interface.d.ts +16 -0
- package/dist/runtime/storage/interface.d.ts.map +1 -0
- package/dist/runtime/storage/interface.js +19 -0
- package/dist/runtime/storage/interface.js.map +1 -0
- package/dist/runtime/storage/local.d.ts +12 -0
- package/dist/runtime/storage/local.d.ts.map +1 -0
- package/dist/runtime/storage/local.js +48 -0
- package/dist/runtime/storage/local.js.map +1 -0
- package/dist/runtime/storage/redis.d.ts +11 -0
- package/dist/runtime/storage/redis.d.ts.map +1 -0
- package/dist/runtime/storage/redis.js +21 -0
- package/dist/runtime/storage/redis.js.map +1 -0
- package/dist/runtime/swarm/reports.d.ts +9 -0
- package/dist/runtime/swarm/reports.d.ts.map +1 -0
- package/dist/runtime/swarm/reports.js +43 -0
- package/dist/runtime/swarm/reports.js.map +1 -0
- package/dist/runtime/swarm.d.ts +38 -0
- package/dist/runtime/swarm.d.ts.map +1 -0
- package/dist/runtime/swarm.js +110 -0
- package/dist/runtime/swarm.js.map +1 -0
- package/dist/runtime/telemetry.d.ts +15 -0
- package/dist/runtime/telemetry.d.ts.map +1 -0
- package/dist/runtime/telemetry.js +25 -0
- package/dist/runtime/telemetry.js.map +1 -0
- package/dist/runtime/tool-utils.d.ts +12 -0
- package/dist/runtime/tool-utils.d.ts.map +1 -0
- package/dist/runtime/tool-utils.js +31 -0
- package/dist/runtime/tool-utils.js.map +1 -0
- package/dist/tools/browser.tool.d.ts +54 -0
- package/dist/tools/browser.tool.d.ts.map +1 -0
- package/dist/tools/browser.tool.js +193 -0
- package/dist/tools/browser.tool.js.map +1 -0
- package/dist/tools/business-apps.tool.d.ts +18 -0
- package/dist/tools/business-apps.tool.d.ts.map +1 -0
- package/dist/tools/business-apps.tool.js +43 -0
- package/dist/tools/business-apps.tool.js.map +1 -0
- package/dist/tools/computer-use.tool.js +66 -66
- package/dist/tools/cross-app-ledger.tool.d.ts +7 -0
- package/dist/tools/cross-app-ledger.tool.d.ts.map +1 -0
- package/dist/tools/cross-app-ledger.tool.js +70 -0
- package/dist/tools/cross-app-ledger.tool.js.map +1 -0
- package/dist/tools/daytona-browser.tool.d.ts +113 -0
- package/dist/tools/daytona-browser.tool.d.ts.map +1 -0
- package/dist/tools/daytona-browser.tool.js +348 -0
- package/dist/tools/daytona-browser.tool.js.map +1 -0
- package/dist/tools/desktop.tool.js +10 -10
- package/dist/tools/documents.tool.js +5 -5
- package/dist/tools/finance.tool.d.ts +18 -0
- package/dist/tools/finance.tool.d.ts.map +1 -0
- package/dist/tools/finance.tool.js +88 -0
- package/dist/tools/finance.tool.js.map +1 -0
- package/dist/tools/image-intelligence.tool.d.ts +12 -0
- package/dist/tools/image-intelligence.tool.d.ts.map +1 -0
- package/dist/tools/image-intelligence.tool.js +62 -0
- package/dist/tools/image-intelligence.tool.js.map +1 -0
- package/dist/tools/notify.tool.js +8 -8
- package/dist/tools/osint-install.tool.js +8 -8
- package/dist/tools/pentest-install.tool.js +6 -6
- package/dist/tools/setup-assistant.tool.d.ts +1 -1
- package/dist/tools/shell.tool.d.ts +18 -0
- package/dist/tools/shell.tool.d.ts.map +1 -1
- package/dist/tools/shell.tool.js +34 -0
- package/dist/tools/shell.tool.js.map +1 -1
- package/dist/tools/swarm-collaboration.tool.d.ts +29 -0
- package/dist/tools/swarm-collaboration.tool.d.ts.map +1 -0
- package/dist/tools/swarm-collaboration.tool.js +88 -0
- package/dist/tools/swarm-collaboration.tool.js.map +1 -0
- package/dist/tools/swarm-memory.tool.d.ts +16 -0
- package/dist/tools/swarm-memory.tool.d.ts.map +1 -0
- package/dist/tools/swarm-memory.tool.js +31 -0
- package/dist/tools/swarm-memory.tool.js.map +1 -0
- package/dist/tools/swarm-ops.tool.d.ts +20 -0
- package/dist/tools/swarm-ops.tool.d.ts.map +1 -0
- package/dist/tools/swarm-ops.tool.js +55 -0
- package/dist/tools/swarm-ops.tool.js.map +1 -0
- package/dist/tools/triggers.tool.d.ts.map +1 -1
- package/dist/tools/visual-audit.tool.d.ts +24 -0
- package/dist/tools/visual-audit.tool.d.ts.map +1 -0
- package/dist/tools/visual-audit.tool.js +48 -0
- package/dist/tools/visual-audit.tool.js.map +1 -0
- package/dist/tools/web-intelligence.tool.d.ts +12 -0
- package/dist/tools/web-intelligence.tool.d.ts.map +1 -0
- package/dist/tools/web-intelligence.tool.js +27 -0
- package/dist/tools/web-intelligence.tool.js.map +1 -0
- package/dist/workspace/init.js +18 -18
- package/dist/workspace/output-paths.d.ts +1 -1
- package/dist/workspace/output-paths.d.ts.map +1 -1
- package/dist/workspace/output-paths.js +1 -0
- package/dist/workspace/output-paths.js.map +1 -1
- package/dist/workspace/paths.d.ts +1 -0
- package/dist/workspace/paths.d.ts.map +1 -1
- package/dist/workspace/paths.js +1 -0
- package/dist/workspace/paths.js.map +1 -1
- package/install.ps1 +62 -62
- package/package.json +107 -103
- package/scripts/postinstall.mjs +42 -42
- package/scripts/release-github.mjs +91 -91
- package/src/doc/README.md +49 -49
- package/src/doc/admin-tools-and-sms-campaigns.md +99 -99
- package/src/doc/escalation-checklist.md +97 -97
- package/src/doc/payments-and-payouts.md +82 -82
- package/src/doc/shift-lifecycle-and-disputes.md +95 -95
- package/src/doc/support-macros.md +40 -40
- package/src/doc/venue-support-playbook.md +145 -145
- package/src/doc/verification-and-trust.md +88 -88
- package/src/doc/worker-support-playbook.md +159 -159
package/README.md
CHANGED
|
@@ -1,503 +1,503 @@
|
|
|
1
|
-
# ZilMate
|
|
2
|
-
|
|
3
|
-
ZilMate is a CLI-first general assistant with deep built-in ZiloShift expertise. It can chat, answer support questions, draft posts, research docs/web sources, generate image assets, and use Composio for external app tools such as GitHub, Gmail, Slack, Notion, Stripe, and Supabase.
|
|
4
|
-
|
|
5
|
-
ZilMate can also work with local files inside safe configured roots: search files/folders, read text files, write approved files, create folders, move/copy/rename, summarize documents, compare folder snapshots for changes, and find duplicate or large files. Sensitive files such as `.env`, keys, credentials, and token-looking paths are blocked.
|
|
6
|
-
|
|
7
|
-
It can also use approved desktop context: read/write clipboard text, take screenshots, open the laptop camera for a still photo, and analyze screenshots/photos with `google/gemini-3.1-flash-lite` by default. Screenshot analysis describes visible UI, extracts visible text when possible, identifies errors or unusual states, and can optionally search the web for troubleshooting context. Camera photo analysis describes visible objects, environments, documents, devices, or issues without identifying people or inferring sensitive traits.
|
|
8
|
-
|
|
9
|
-
The GitHub project can remain `zilo-manager`, but the installable npm package and command are both `zilmate`.
|
|
10
|
-
|
|
11
|
-
## Install ZilMate
|
|
12
|
-
|
|
13
|
-
### Published npm package
|
|
14
|
-
|
|
15
|
-
After the package is published to npm:
|
|
16
|
-
|
|
17
|
-
```powershell
|
|
18
|
-
npm install -g zilmate
|
|
19
|
-
zilmate setup
|
|
20
|
-
zilmate --help
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
Running `zilmate` with no arguments opens the status dashboard and then the guided launcher menu. If the AI Gateway key is missing, the launcher offers setup before starting chat.
|
|
24
|
-
|
|
25
|
-
When a new CLI/SDK release is published, users can update without remembering npm commands:
|
|
26
|
-
|
|
27
|
-
```powershell
|
|
28
|
-
zilmate update
|
|
29
|
-
zilmate version
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
### GitHub/private install
|
|
33
|
-
|
|
34
|
-
Before npm publishing, install directly from the GitHub repo:
|
|
35
|
-
|
|
36
|
-
```powershell
|
|
37
|
-
npm install -g github:zester4/zilo-manager
|
|
38
|
-
zilmate setup
|
|
39
|
-
zilmate --help
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
### Windows installer helper
|
|
43
|
-
|
|
44
|
-
From PowerShell, the helper can install from GitHub by default:
|
|
45
|
-
|
|
46
|
-
```powershell
|
|
47
|
-
iwr https://raw.githubusercontent.com/zester4/zilo-manager/main/install.ps1 | iex
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
The installer runs the full first-use flow:
|
|
51
|
-
|
|
52
|
-
1. Installs ZilMate globally.
|
|
53
|
-
2. Runs `zilmate setup` to collect `AI_GATEWAY_API_KEY`.
|
|
54
|
-
3. Lets users skip optional Composio, Tavily, Redis, background jobs, QStash, and trigger workflows.
|
|
55
|
-
4. Runs `zilmate ping` to verify the key.
|
|
56
|
-
5. Starts `zilmate talk`.
|
|
57
|
-
|
|
58
|
-
To install without setup:
|
|
59
|
-
|
|
60
|
-
```powershell
|
|
61
|
-
iex "& { $((iwr -UseBasicParsing https://raw.githubusercontent.com/zester4/zilo-manager/main/install.ps1).Content) } -NoSetup"
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
To skip ping or chat startup:
|
|
65
|
-
|
|
66
|
-
```powershell
|
|
67
|
-
iex "& { $((iwr -UseBasicParsing https://raw.githubusercontent.com/zester4/zilo-manager/main/install.ps1).Content) } -NoPing -NoTalk"
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
To install from npm after publishing:
|
|
71
|
-
|
|
72
|
-
```powershell
|
|
73
|
-
iex "& { $((iwr -UseBasicParsing https://raw.githubusercontent.com/zester4/zilo-manager/main/install.ps1).Content) } -Source npm"
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
The helper checks for Node/npm, runs `npm install -g`, prints `zilmate --help`, starts setup unless `-NoSetup` is passed, verifies auth unless `-NoPing` is passed, and starts chat unless `-NoTalk` is passed.
|
|
77
|
-
|
|
78
|
-
## Setup
|
|
79
|
-
|
|
80
|
-
1. Install dependencies:
|
|
81
|
-
|
|
82
|
-
```powershell
|
|
83
|
-
npm install
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
2. Create `.env` from `.env.example`:
|
|
87
|
-
|
|
88
|
-
The easiest path is:
|
|
89
|
-
|
|
90
|
-
```powershell
|
|
91
|
-
zilmate setup
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
Before asking for secrets, setup shows what to have ready:
|
|
95
|
-
|
|
96
|
-
- Required: AI Gateway key.
|
|
97
|
-
- Optional app tools: Composio key.
|
|
98
|
-
- Optional web research: Tavily key.
|
|
99
|
-
- Optional cloud memory/jobs: Upstash Redis URL and token.
|
|
100
|
-
- Optional hosted schedules: QStash token and public webhook URL.
|
|
101
|
-
- Optional realtime voice: Deepgram key.
|
|
102
|
-
- Optional camera capture: `ffmpeg` installed on PATH.
|
|
103
|
-
|
|
104
|
-
Then it asks for `AI_GATEWAY_API_KEY` and guides users through optional features:
|
|
105
|
-
|
|
106
|
-
- Composio external app tools.
|
|
107
|
-
- Tavily web research.
|
|
108
|
-
- Upstash Redis memory/job storage.
|
|
109
|
-
- Local background jobs and schedules.
|
|
110
|
-
- Upstash QStash hosted schedules.
|
|
111
|
-
- Composio trigger-to-job workflows.
|
|
112
|
-
- Deepgram realtime voice mode.
|
|
113
|
-
- Local file tool roots.
|
|
114
|
-
- Screenshot/photo vision model.
|
|
115
|
-
- Camera dependency and device setup.
|
|
116
|
-
|
|
117
|
-
Every optional feature can be skipped. If users only want chat, they only need the AI Gateway key.
|
|
118
|
-
|
|
119
|
-
Voice can be managed without opening `.env`:
|
|
120
|
-
|
|
121
|
-
```powershell
|
|
122
|
-
zilmate voice setup
|
|
123
|
-
zilmate voice enable
|
|
124
|
-
zilmate voice disable
|
|
125
|
-
zilmate voice doctor
|
|
126
|
-
zilmate voice devices
|
|
127
|
-
zilmate voice live
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
Inside `zilmate talk`, use `/voice` to start a live terminal voice session. Speak naturally, then press Enter to stop voice and return to typed chat:
|
|
131
|
-
|
|
132
|
-
```text
|
|
133
|
-
/voice
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
You can also create `.env` manually:
|
|
137
|
-
|
|
138
|
-
```env
|
|
139
|
-
AI_GATEWAY_API_KEY=your_vercel_ai_gateway_key
|
|
140
|
-
COMPOSIO_API_KEY=your_composio_key
|
|
141
|
-
ZILMATE_USER_ID=zilmate-generated-local-user-id
|
|
142
|
-
TAVILY_API_KEY=your_tavily_key
|
|
143
|
-
UPSTASH_REDIS_REST_URL=
|
|
144
|
-
UPSTASH_REDIS_REST_TOKEN=
|
|
145
|
-
ZILMATE_JOBS_ENABLED=false
|
|
146
|
-
UPSTASH_QSTASH_TOKEN=
|
|
147
|
-
ZILMATE_PUBLIC_JOB_WEBHOOK_URL=
|
|
148
|
-
ZILMATE_JOB_WEBHOOK_SECRET=
|
|
149
|
-
ZILMATE_TRIGGER_WORKFLOWS_ENABLED=false
|
|
150
|
-
DEEPGRAM_API_KEY=
|
|
151
|
-
ZILMATE_VOICE_ENABLED=false
|
|
152
|
-
ZILMATE_VOICE_MODE=agent
|
|
153
|
-
ZILMATE_VOICE_LISTEN_MODEL=flux-general-en
|
|
154
|
-
ZILMATE_VOICE_LISTEN_VERSION=v2
|
|
155
|
-
ZILMATE_VOICE_TTS_MODEL=aura-2-thalia-en
|
|
156
|
-
ZILMATE_VOICE_LANGUAGE=en
|
|
157
|
-
ZILMATE_VOICE_LANGUAGE_HINTS=
|
|
158
|
-
ZILMATE_VOICE_BARGE_IN=true
|
|
159
|
-
ZILMATE_VOICE_INPUT_DEVICE=
|
|
160
|
-
ZILMATE_SCREENSHOT_MODEL=google/gemini-3.1-flash-lite
|
|
161
|
-
ZILMATE_CAMERA_DEVICE=
|
|
162
|
-
ZILMATE_FILE_ROOTS=
|
|
163
|
-
ZILO_MANAGER_MODEL=minimax/minimax-m3
|
|
164
|
-
ZILO_HELP_MODEL=alibaba/qwen3.7-plus
|
|
165
|
-
ZILO_POST_MODEL=alibaba/qwen3.7-plus
|
|
166
|
-
ZILO_IMAGE_DEFAULT_PROVIDER=openai
|
|
167
|
-
ZILO_IMAGE_OPENAI_MODEL=openai/gpt-image-2
|
|
168
|
-
ZILO_IMAGE_GEMINI_MODEL=google/gemini-3-pro-image
|
|
169
|
-
ZILO_IMAGE_MODEL=
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
Composio is optional. If `COMPOSIO_API_KEY` is set, ZilMate creates a stable local `ZILMATE_USER_ID`, reuses Composio sessions per chat session, and lets Composio manage app auth links and connected accounts.
|
|
173
|
-
|
|
174
|
-
Redis is optional. If `UPSTASH_REDIS_REST_URL` and `UPSTASH_REDIS_REST_TOKEN` are set, chat turns, scratchpads, and Composio session ids use Redis. If they are missing, ZilMate falls back to local files under `.zilo-manager/`.
|
|
175
|
-
|
|
176
|
-
Background jobs are optional. Setup explains the difference between local jobs and hosted schedules. Local jobs and local schedules run while `zilmate jobs worker` is running. They do not keep running after a laptop sleeps, shuts down, or loses internet. For hosted schedules that can fire while the local machine is closed, configure QStash plus a public job webhook URL.
|
|
177
|
-
|
|
178
|
-
Realtime voice is optional. If `DEEPGRAM_API_KEY` and `ZILMATE_VOICE_ENABLED=true` are set, ZilMate uses Deepgram Flux for listening/end-of-turn, routes transcripts through the ZilMate manager/tools/subagents, and speaks replies with Deepgram Aura-2 websocket TTS. The default listen model is `flux-general-en` with `v2`. The default spoken voice is `aura-2-thalia-en`. Terminal live voice uses `ffmpeg` for microphone capture and `ffplay` for spoken replies. If the default microphone is not detected, run `zilmate voice devices`, then set `ZILMATE_VOICE_INPUT_DEVICE`.
|
|
179
|
-
|
|
180
|
-
Use `zilmate voice setup` for a focused voice-only wizard. Use `zilmate voice enable` and `zilmate voice disable` to toggle voice later without editing config files.
|
|
181
|
-
|
|
182
|
-
Camera capture is optional. During `zilmate setup`, ZilMate checks for `ffmpeg`, asks before installing it, and then runs a camera readiness check. If the automatic installer is not available, setup keeps going and tells the user to run `zilmate camera doctor`.
|
|
183
|
-
|
|
184
|
-
Local file tools are optional. During setup, users can keep the default current-folder access or add comma-separated roots through `ZILMATE_FILE_ROOTS`.
|
|
185
|
-
|
|
186
|
-
For unattended setup or installers, pass the options directly:
|
|
187
|
-
|
|
188
|
-
```powershell
|
|
189
|
-
zilmate setup --yes --ai-gateway-key <key> --jobs-enabled true
|
|
190
|
-
zilmate setup --yes --ai-gateway-key <key> --composio-key <key> --trigger-workflows-enabled true
|
|
191
|
-
zilmate setup --yes --ai-gateway-key <key> --qstash-token <token> --job-webhook-url https://example.com/api/zilmate/jobs
|
|
192
|
-
zilmate setup --yes --ai-gateway-key <key> --voice-enabled true --deepgram-key <key>
|
|
193
|
-
zilmate setup --yes --ai-gateway-key <key> --voice-input-device "audio=Microphone Array"
|
|
194
|
-
zilmate setup --yes --ai-gateway-key <key> --install-camera-deps true
|
|
195
|
-
zilmate setup --yes --ai-gateway-key <key> --camera-device "video=Integrated Camera"
|
|
196
|
-
zilmate setup --yes --ai-gateway-key <key> --file-roots "C:\Users\me\Documents,C:\work"
|
|
197
|
-
zilmate setup --yes --ai-gateway-key <key> --screenshot-model google/gemini-3.1-flash-lite
|
|
198
|
-
```
|
|
199
|
-
|
|
200
|
-
## Development Commands
|
|
201
|
-
|
|
202
|
-
Use these while working inside the project folder:
|
|
203
|
-
|
|
204
|
-
```powershell
|
|
205
|
-
npm run build
|
|
206
|
-
npm run zilmate -- --help
|
|
207
|
-
npm run zilmate -- setup
|
|
208
|
-
npm run zilmate -- doctor
|
|
209
|
-
npm run zilmate -- config
|
|
210
|
-
npm run zilmate -- models
|
|
211
|
-
npm run zilmate -- apps status
|
|
212
|
-
npm run zilmate -- triggers listen
|
|
213
|
-
npm run zilmate -- triggers types github
|
|
214
|
-
npm run zilmate -- triggers list
|
|
215
|
-
npm run zilmate -- jobs create "Research today's priority updates and summarize them"
|
|
216
|
-
npm run zilmate -- jobs list
|
|
217
|
-
npm run zilmate -- jobs worker --once
|
|
218
|
-
npm run zilmate -- voice doctor
|
|
219
|
-
npm run zilmate -- voice setup
|
|
220
|
-
npm run zilmate -- voice disable
|
|
221
|
-
npm run zilmate -- voice enable
|
|
222
|
-
npm run zilmate -- voice turn "What should I focus on today?"
|
|
223
|
-
npm run zilmate -- remember "Prefers concise support replies"
|
|
224
|
-
npm run zilmate -- recall support
|
|
225
|
-
npm run zilmate -- memory list
|
|
226
|
-
npm run zilmate -- talk
|
|
227
|
-
npm run zilmate -- talk --session launch
|
|
228
|
-
npm run zilmate -- help "why can't a worker apply?"
|
|
229
|
-
npm run zilmate -- post "WhatsApp status for workers in Accra"
|
|
230
|
-
npm run zilmate -- research "Vercel AI SDK ToolLoopAgent"
|
|
231
|
-
npm run zilmate -- image --model openai --size 1024x1024 "ZiloShift launch poster for Ghana workers"
|
|
232
|
-
npm run zilmate -- image --model gemini "ZiloShift launch poster for Ghana workers"
|
|
233
|
-
npm run zilmate -- manager "Create a plan for helping venues post shifts"
|
|
234
|
-
```
|
|
235
|
-
|
|
236
|
-
Shortcut:
|
|
237
|
-
|
|
238
|
-
```powershell
|
|
239
|
-
npm run talk
|
|
240
|
-
npm run doctor
|
|
241
|
-
```
|
|
242
|
-
|
|
243
|
-
## Global CLI
|
|
244
|
-
|
|
245
|
-
For local development, link the command from this folder:
|
|
246
|
-
|
|
247
|
-
```powershell
|
|
248
|
-
npm run build
|
|
249
|
-
npm link
|
|
250
|
-
```
|
|
251
|
-
|
|
252
|
-
Then use ZilMate directly:
|
|
253
|
-
|
|
254
|
-
```powershell
|
|
255
|
-
zilmate --help
|
|
256
|
-
zilmate setup
|
|
257
|
-
zilmate doctor
|
|
258
|
-
zilmate update
|
|
259
|
-
zilmate version
|
|
260
|
-
zilmate env check
|
|
261
|
-
zilmate config
|
|
262
|
-
zilmate talk
|
|
263
|
-
zilmate ping
|
|
264
|
-
zilmate models
|
|
265
|
-
zilmate apps status
|
|
266
|
-
zilmate triggers listen
|
|
267
|
-
zilmate triggers types github
|
|
268
|
-
zilmate triggers create GITHUB_BRANCH_CREATED_TRIGGER --dry-run --owner zester4 --repo zilo-manager
|
|
269
|
-
zilmate triggers create GITHUB_COMMIT_EVENT --owner zester4 --repo zilo-manager
|
|
270
|
-
zilmate triggers list
|
|
271
|
-
zilmate jobs create "Research today's priority updates and summarize them"
|
|
272
|
-
zilmate jobs create "Prepare my weekday morning briefing" --schedule "daily"
|
|
273
|
-
zilmate jobs list
|
|
274
|
-
zilmate jobs status job_xxx
|
|
275
|
-
zilmate jobs logs job_xxx
|
|
276
|
-
zilmate jobs run job_xxx
|
|
277
|
-
zilmate jobs worker
|
|
278
|
-
zilmate jobs cancel job_xxx
|
|
279
|
-
zilmate voice doctor
|
|
280
|
-
zilmate voice config
|
|
281
|
-
zilmate voice setup
|
|
282
|
-
zilmate voice disable
|
|
283
|
-
zilmate voice enable
|
|
284
|
-
zilmate voice turn "Plan my next two hours"
|
|
285
|
-
zilmate voice devices
|
|
286
|
-
zilmate voice live
|
|
287
|
-
zilmate voice agent-probe
|
|
288
|
-
zilmate camera doctor
|
|
289
|
-
zilmate camera list
|
|
290
|
-
zilmate camera capture
|
|
291
|
-
zilmate camera capture --device "video=Integrated Camera"
|
|
292
|
-
zilmate remember "Use a warm but concise support tone"
|
|
293
|
-
zilmate recall support
|
|
294
|
-
zilmate memory list
|
|
295
|
-
zilmate help "worker cannot see shifts"
|
|
296
|
-
zilmate image --model openai --size 1024x1024 "ZiloShift launch poster"
|
|
297
|
-
```
|
|
298
|
-
|
|
299
|
-
## Server SDK
|
|
300
|
-
|
|
301
|
-
ZilMate can also be used as a server-side SDK inside apps, dashboards, API routes, and background jobs. The SDK is server-only because it uses API keys, local/Redis memory, Tavily, Composio, and AI Gateway credentials.
|
|
302
|
-
|
|
303
|
-
```ts
|
|
304
|
-
import { createZilMate } from 'zilmate/server';
|
|
305
|
-
|
|
306
|
-
const zilmate = createZilMate({
|
|
307
|
-
sessionId: 'support-ticket-123',
|
|
308
|
-
});
|
|
309
|
-
|
|
310
|
-
const result = await zilmate.chat({
|
|
311
|
-
message: 'Plan my day, then help me draft a ZiloShift worker update.',
|
|
312
|
-
});
|
|
313
|
-
|
|
314
|
-
console.log(result.text);
|
|
315
|
-
```
|
|
316
|
-
|
|
317
|
-
In Next.js, call ZilMate from an API route or server action, then connect your UI to that endpoint:
|
|
318
|
-
|
|
319
|
-
```ts
|
|
320
|
-
// app/api/zilmate/route.ts
|
|
321
|
-
import { createZilMate } from 'zilmate/server';
|
|
322
|
-
|
|
323
|
-
export async function POST(req: Request) {
|
|
324
|
-
const { message, sessionId } = await req.json();
|
|
325
|
-
const zilmate = createZilMate({ sessionId });
|
|
326
|
-
const result = await zilmate.chat({ message });
|
|
327
|
-
|
|
328
|
-
return Response.json(result);
|
|
329
|
-
}
|
|
330
|
-
```
|
|
331
|
-
|
|
332
|
-
Available SDK methods:
|
|
333
|
-
|
|
334
|
-
- `chat({ message })`: general personal assistant backed by the manager agent.
|
|
335
|
-
- `manager({ message | prompt })`: explicit manager orchestration.
|
|
336
|
-
- `help({ question | message })`: fast ZiloShift troubleshooting.
|
|
337
|
-
- `guide({ message })`: ZiloShift workflow conversation.
|
|
338
|
-
- `post({ prompt })`: WhatsApp/status/social copy.
|
|
339
|
-
- `research({ query | message })`: local docs and web research.
|
|
340
|
-
- `image({ prompt, provider, size, outputDir })`: image generation.
|
|
341
|
-
- `remember({ text, tags })`, `recall({ query, limit })`, `listMemories()`, `forget(id)`, `clearMemories()`: durable memory helpers.
|
|
342
|
-
- `createJob({ task, schedule, source, metadata })`, `listJobs({ status, limit })`, `getJob(id)`, `getJobLogs(id)`, `runJob(id)`, `runDueJobs()`, `handleJobWebhook({ jobId, secret }, expectedSecret)`, `cancelJob(id)`: background job and hosted webhook helpers.
|
|
343
|
-
- `getVoiceConfig()`, `startVoiceSession({ audio, onEvent, sessionId })`: Deepgram realtime voice configuration and Agent API session helpers.
|
|
344
|
-
|
|
345
|
-
For UI integrations, pass `onProgress` to render agent/tool progress and `confirm` to approve or block external write-like Composio actions.
|
|
346
|
-
|
|
347
|
-
## Command Shape
|
|
348
|
-
|
|
349
|
-
- `talk`: persistent interactive chat with the main manager agent. This is the best mode for normal use and renders rich terminal Markdown.
|
|
350
|
-
- `manager`: one-shot manager orchestration. It can delegate to subagents and use scratchpad tools.
|
|
351
|
-
- `doctor`: check local setup, required/optional keys, Node version, memory folder, Redis completeness, and optional live Gateway/Composio status with `--live`.
|
|
352
|
-
- `env check`: environment-readiness alias for `doctor`.
|
|
353
|
-
- `config`: sanitized config summary without secrets.
|
|
354
|
-
- `remember`: save durable long-term memory.
|
|
355
|
-
- `recall`: search durable long-term memory.
|
|
356
|
-
- `forget`: delete one memory by id, or use `--all`.
|
|
357
|
-
- `memory list`: list saved durable memories.
|
|
358
|
-
- `apps status`: show whether Composio is configured, the local `ZILMATE_USER_ID`, the current Composio session id, and connected/available toolkit status when the SDK can fetch it.
|
|
359
|
-
- `triggers listen`: stream Composio trigger events into the terminal until Ctrl+C.
|
|
360
|
-
- `triggers types [toolkit]`: list available trigger types, optionally for one toolkit.
|
|
361
|
-
- `triggers info <trigger>`: show trigger config and payload schemas.
|
|
362
|
-
- `triggers create <trigger> --flag value`: create a trigger instance; unknown flags become trigger config.
|
|
363
|
-
- `triggers list`: list trigger instances.
|
|
364
|
-
- `jobs create "<task>"`: queue a background job, optionally with `--schedule "daily"` or `--schedule "every 15 minutes"`.
|
|
365
|
-
- `jobs list`: list queued/running/completed jobs.
|
|
366
|
-
- `jobs status <id>`: inspect one job.
|
|
367
|
-
- `jobs logs <id>`: inspect job progress, output, and errors.
|
|
368
|
-
- `jobs run <id>`: run a queued job immediately.
|
|
369
|
-
- `jobs worker`: run the local job processor and local scheduler.
|
|
370
|
-
- `jobs cancel <id>`: cancel one job.
|
|
371
|
-
- `camera doctor`: check OS, ffmpeg availability, detected camera devices, and fallback candidates.
|
|
372
|
-
- `camera list`: list camera device names ZilMate can try.
|
|
373
|
-
- `camera capture`: capture one still image, with retry across common device names unless `--device` is provided.
|
|
374
|
-
- `help`: fast troubleshooting and app guidance.
|
|
375
|
-
- `chat`: one-shot natural dialogue about ZiloShift workflows.
|
|
376
|
-
- `post`: WhatsApp/status/social copy generation.
|
|
377
|
-
- `research`: local docs, allowlisted docs, Tavily search/extract/map/crawl/deep research, and sourced summaries.
|
|
378
|
-
- `image`: Gateway image generation that saves files under `outputs/images/`. Use `--model openai|chatgpt|gemini` and optionally `--size 1024x1024` for OpenAI.
|
|
379
|
-
- `models`: selected models, Gateway availability warnings, and active memory backend.
|
|
380
|
-
- `ping`: tiny Gateway text call to verify auth.
|
|
381
|
-
- `setup`: interactive `.env` setup for the required AI Gateway key, optional Composio external app tools, optional Tavily search, optional Redis memory, and model defaults.
|
|
382
|
-
|
|
383
|
-
## Agent Architecture
|
|
384
|
-
|
|
385
|
-
ZilMate uses a manager agent that delegates to focused subagents and external tools:
|
|
386
|
-
|
|
387
|
-
- Quick Help: short troubleshooting and app usage guidance.
|
|
388
|
-
- Chat: broader ZiloShift workflow conversation.
|
|
389
|
-
- Post: launch messages, WhatsApp statuses, captions, and outreach copy.
|
|
390
|
-
- Research: local Zilo docs first, then external docs/web research when needed.
|
|
391
|
-
- Image: image generation through Gateway image models.
|
|
392
|
-
- Automation Planner: background jobs, schedules, trigger workflows, QStash/webhook planning, monitoring, and follow-up automations.
|
|
393
|
-
- Personal Assistant: daily planning, reminders, briefings, prioritization, follow-ups, summaries, and memory-aware organization.
|
|
394
|
-
- Developer Helper: CLI/SDK usage, Next.js integration, publishing, QStash, Cloudflare tunnels, webhooks, Composio setup, and debugging.
|
|
395
|
-
- Composio: external app discovery, auth links, schemas, and execution, attached only to the manager.
|
|
396
|
-
- Memory: durable ZilMate facts and preferences saved locally or in Redis, available through CLI commands and manager tools.
|
|
397
|
-
- Jobs: background task creation, schedule setup, status checks, logs, and cancellation available through CLI, SDK, and manager tools.
|
|
398
|
-
- Files: local file search, safe reading, approved writes, folder creation, move/copy/rename, document summaries, folder-change snapshots, and duplicate/large-file audits.
|
|
399
|
-
- Desktop: approved clipboard access, screenshot capture, laptop camera still capture, and Gemini-powered screenshot/photo understanding. Ask naturally inside `zilmate talk`, such as "look at my screen and explain the error", "look through my camera and describe this device", "search this folder for billing docs", or "copy that command to my clipboard".
|
|
400
|
-
|
|
401
|
-
Camera capture requires `ffmpeg` on PATH. On Windows, install with `winget install Gyan.FFmpeg`; on macOS, use `brew install ffmpeg`; on Linux, install `ffmpeg` from your package manager. Run `zilmate camera doctor` to verify OS support and `zilmate camera list` to get exact device names. If Windows reports a custom camera name, set `ZILMATE_CAMERA_DEVICE=video=Your Camera Name` or pass `--device "video=Your Camera Name"`. Clipboard, screenshot, and camera access always ask for approval in agent mode, and can be approved for the current session with `s=session`.
|
|
402
|
-
|
|
403
|
-
Local ZiloShift docs live under `src/doc/`. ZilMate reads them on demand through dedicated tools instead of dumping all docs into every prompt. The manager prefers these local docs for ZiloShift support, worker, venue, payment, verification, SMS, and dispute questions.
|
|
404
|
-
|
|
405
|
-
## External Apps With Composio
|
|
406
|
-
|
|
407
|
-
Run setup and add a Composio key:
|
|
408
|
-
|
|
409
|
-
```powershell
|
|
410
|
-
zilmate setup
|
|
411
|
-
zilmate apps status
|
|
412
|
-
```
|
|
413
|
-
|
|
414
|
-
In `zilmate talk`, ask for the external task naturally. If an account is not connected yet, ZilMate uses Composio connection tools and prints the connect link returned by Composio. ZilMate does not implement custom OAuth flows.
|
|
415
|
-
|
|
416
|
-
Read/search/schema/auth-link tools can run without confirmation. Write-like external app actions such as create, update, delete, send, post, publish, invite, transfer, charge, refund, cancel, approve, revoke, workbench, or bash require `Proceed? (y/N)` in the terminal. In noninteractive mode, write-like actions are blocked.
|
|
417
|
-
|
|
418
|
-
## Trigger Events
|
|
419
|
-
|
|
420
|
-
For live terminal events, use Composio trigger listening:
|
|
421
|
-
|
|
422
|
-
```powershell
|
|
423
|
-
zilmate triggers types github
|
|
424
|
-
zilmate triggers create GITHUB_COMMIT_EVENT --owner zester4 --repo zilo-manager
|
|
425
|
-
zilmate triggers listen
|
|
426
|
-
```
|
|
427
|
-
|
|
428
|
-
`listen` streams matching trigger events until Ctrl+C. Use filters when needed:
|
|
429
|
-
|
|
430
|
-
```powershell
|
|
431
|
-
zilmate triggers listen --toolkit gmail
|
|
432
|
-
zilmate triggers listen --trigger ti_abc123
|
|
433
|
-
zilmate triggers listen --trigger-slug GMAIL_NEW_EMAIL_EVENT --once
|
|
434
|
-
```
|
|
435
|
-
|
|
436
|
-
This is terminal-local. When `ZILMATE_TRIGGER_WORKFLOWS_ENABLED=true`, trigger events handled by `zilmate triggers listen` also create background jobs. ZilMate includes generic workflow prompts for Gmail, GitHub, Slack, and calendar-style events, and falls back to a general external-app summary task for other toolkits.
|
|
437
|
-
|
|
438
|
-
The manager agent also has trigger tools. In `zilmate talk`, you can ask:
|
|
439
|
-
|
|
440
|
-
```text
|
|
441
|
-
show me GitHub trigger types
|
|
442
|
-
prepare a branch-created trigger for zester4/zilo-manager
|
|
443
|
-
create that trigger
|
|
444
|
-
```
|
|
445
|
-
|
|
446
|
-
ZilMate should discover current trigger slugs first, inspect the trigger schema, prefer a dry-run payload, and ask for confirmation before creating a real trigger.
|
|
447
|
-
|
|
448
|
-
## Background Jobs And Schedules
|
|
449
|
-
|
|
450
|
-
Use jobs when ZilMate should keep working after a chat turn ends:
|
|
451
|
-
|
|
452
|
-
```powershell
|
|
453
|
-
zilmate jobs create "Research AI assistant scheduling patterns and save a summary"
|
|
454
|
-
zilmate jobs create "Prepare my morning briefing" --schedule daily
|
|
455
|
-
zilmate jobs worker
|
|
456
|
-
```
|
|
457
|
-
|
|
458
|
-
Local job storage uses `.zilo-manager/jobs.json` and `.zilo-manager/job-logs.json` unless Redis is configured. With Redis, jobs and logs use the same Upstash REST connection as memory.
|
|
459
|
-
|
|
460
|
-
Schedules supported locally include `hourly`, `daily`, `every 15 minutes`, `every 2 hours`, `every 1 day`, and ISO date/time strings. QStash schedules can use `cron:<expression>` when `UPSTASH_QSTASH_TOKEN` and `ZILMATE_PUBLIC_JOB_WEBHOOK_URL` are configured.
|
|
461
|
-
|
|
462
|
-
Hosted apps can expose a webhook route and call:
|
|
463
|
-
|
|
464
|
-
```ts
|
|
465
|
-
import { createZilMate } from 'zilmate/server';
|
|
466
|
-
|
|
467
|
-
export async function POST(req: Request) {
|
|
468
|
-
const body = await req.json();
|
|
469
|
-
const zilmate = createZilMate();
|
|
470
|
-
const result = await zilmate.handleJobWebhook(
|
|
471
|
-
{ jobId: body.jobId, secret: req.headers.get('ZilMate-Webhook-Secret') ?? undefined },
|
|
472
|
-
process.env.ZILMATE_JOB_WEBHOOK_SECRET,
|
|
473
|
-
);
|
|
474
|
-
|
|
475
|
-
return Response.json(result);
|
|
476
|
-
}
|
|
477
|
-
```
|
|
478
|
-
|
|
479
|
-
## Model Notes
|
|
480
|
-
|
|
481
|
-
- Manager/orchestration default: `minimax/minimax-m3`.
|
|
482
|
-
- Recommended help/post override: `alibaba/qwen3.7-plus` in `.env`.
|
|
483
|
-
- If help/post env vars are blank, ZilMate falls back to the internal cheap-model list in `src/config/models.ts`.
|
|
484
|
-
- Default image provider: OpenAI GPT Image 2 via `openai/gpt-image-2` and AI SDK `generateImage`.
|
|
485
|
-
- Alternate image provider: Gemini 3 Pro Image via `google/gemini-3-pro-image` and `generateText` file outputs.
|
|
486
|
-
- GPT-2 is not used for images.
|
|
487
|
-
|
|
488
|
-
## Research And Memory
|
|
489
|
-
|
|
490
|
-
- Zilo docs are searched/read locally first for product behavior.
|
|
491
|
-
- Tavily powers web search, URL extraction, site mapping, small capped crawls, and deep research.
|
|
492
|
-
- Web crawling and deep research are intentionally heavier tools and should be used only when local docs/search are not enough.
|
|
493
|
-
- Scratchpads keep intermediate notes outside the main prompt context.
|
|
494
|
-
- Long-term memory stores stable preferences and durable project facts. Use `zilmate remember`, `zilmate recall`, `zilmate forget`, and `zilmate memory list`.
|
|
495
|
-
- `zilmate talk` automatically recalls relevant long-term memories for each message.
|
|
496
|
-
- Redis is optional; local file memory is the fallback.
|
|
497
|
-
- `zilmate setup` creates or updates the local `.env` used by the CLI.
|
|
498
|
-
|
|
499
|
-
## Safety Notes
|
|
500
|
-
|
|
501
|
-
ZilMate can guide, research, draft, generate assets, and run approved external app actions through Composio. It should not claim that live external or ZiloShift data changed unless a tool result confirms it.
|
|
502
|
-
|
|
503
|
-
Before adding real actions around payments, identity, SMS, users, or admin operations, add stronger permission levels, confirmation gates, audit logs, and behavioral evals.
|
|
1
|
+
# ZilMate
|
|
2
|
+
|
|
3
|
+
ZilMate is a CLI-first general assistant with deep built-in ZiloShift expertise. It can chat, answer support questions, draft posts, research docs/web sources, generate image assets, and use Composio for external app tools such as GitHub, Gmail, Slack, Notion, Stripe, and Supabase.
|
|
4
|
+
|
|
5
|
+
ZilMate can also work with local files inside safe configured roots: search files/folders, read text files, write approved files, create folders, move/copy/rename, summarize documents, compare folder snapshots for changes, and find duplicate or large files. Sensitive files such as `.env`, keys, credentials, and token-looking paths are blocked.
|
|
6
|
+
|
|
7
|
+
It can also use approved desktop context: read/write clipboard text, take screenshots, open the laptop camera for a still photo, and analyze screenshots/photos with `google/gemini-3.1-flash-lite` by default. Screenshot analysis describes visible UI, extracts visible text when possible, identifies errors or unusual states, and can optionally search the web for troubleshooting context. Camera photo analysis describes visible objects, environments, documents, devices, or issues without identifying people or inferring sensitive traits.
|
|
8
|
+
|
|
9
|
+
The GitHub project can remain `zilo-manager`, but the installable npm package and command are both `zilmate`.
|
|
10
|
+
|
|
11
|
+
## Install ZilMate
|
|
12
|
+
|
|
13
|
+
### Published npm package
|
|
14
|
+
|
|
15
|
+
After the package is published to npm:
|
|
16
|
+
|
|
17
|
+
```powershell
|
|
18
|
+
npm install -g zilmate
|
|
19
|
+
zilmate setup
|
|
20
|
+
zilmate --help
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Running `zilmate` with no arguments opens the status dashboard and then the guided launcher menu. If the AI Gateway key is missing, the launcher offers setup before starting chat.
|
|
24
|
+
|
|
25
|
+
When a new CLI/SDK release is published, users can update without remembering npm commands:
|
|
26
|
+
|
|
27
|
+
```powershell
|
|
28
|
+
zilmate update
|
|
29
|
+
zilmate version
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### GitHub/private install
|
|
33
|
+
|
|
34
|
+
Before npm publishing, install directly from the GitHub repo:
|
|
35
|
+
|
|
36
|
+
```powershell
|
|
37
|
+
npm install -g github:zester4/zilo-manager
|
|
38
|
+
zilmate setup
|
|
39
|
+
zilmate --help
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Windows installer helper
|
|
43
|
+
|
|
44
|
+
From PowerShell, the helper can install from GitHub by default:
|
|
45
|
+
|
|
46
|
+
```powershell
|
|
47
|
+
iwr https://raw.githubusercontent.com/zester4/zilo-manager/main/install.ps1 | iex
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
The installer runs the full first-use flow:
|
|
51
|
+
|
|
52
|
+
1. Installs ZilMate globally.
|
|
53
|
+
2. Runs `zilmate setup` to collect `AI_GATEWAY_API_KEY`.
|
|
54
|
+
3. Lets users skip optional Composio, Tavily, Redis, background jobs, QStash, and trigger workflows.
|
|
55
|
+
4. Runs `zilmate ping` to verify the key.
|
|
56
|
+
5. Starts `zilmate talk`.
|
|
57
|
+
|
|
58
|
+
To install without setup:
|
|
59
|
+
|
|
60
|
+
```powershell
|
|
61
|
+
iex "& { $((iwr -UseBasicParsing https://raw.githubusercontent.com/zester4/zilo-manager/main/install.ps1).Content) } -NoSetup"
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
To skip ping or chat startup:
|
|
65
|
+
|
|
66
|
+
```powershell
|
|
67
|
+
iex "& { $((iwr -UseBasicParsing https://raw.githubusercontent.com/zester4/zilo-manager/main/install.ps1).Content) } -NoPing -NoTalk"
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
To install from npm after publishing:
|
|
71
|
+
|
|
72
|
+
```powershell
|
|
73
|
+
iex "& { $((iwr -UseBasicParsing https://raw.githubusercontent.com/zester4/zilo-manager/main/install.ps1).Content) } -Source npm"
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
The helper checks for Node/npm, runs `npm install -g`, prints `zilmate --help`, starts setup unless `-NoSetup` is passed, verifies auth unless `-NoPing` is passed, and starts chat unless `-NoTalk` is passed.
|
|
77
|
+
|
|
78
|
+
## Setup
|
|
79
|
+
|
|
80
|
+
1. Install dependencies:
|
|
81
|
+
|
|
82
|
+
```powershell
|
|
83
|
+
npm install
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
2. Create `.env` from `.env.example`:
|
|
87
|
+
|
|
88
|
+
The easiest path is:
|
|
89
|
+
|
|
90
|
+
```powershell
|
|
91
|
+
zilmate setup
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Before asking for secrets, setup shows what to have ready:
|
|
95
|
+
|
|
96
|
+
- Required: AI Gateway key.
|
|
97
|
+
- Optional app tools: Composio key.
|
|
98
|
+
- Optional web research: Tavily key.
|
|
99
|
+
- Optional cloud memory/jobs: Upstash Redis URL and token.
|
|
100
|
+
- Optional hosted schedules: QStash token and public webhook URL.
|
|
101
|
+
- Optional realtime voice: Deepgram key.
|
|
102
|
+
- Optional camera capture: `ffmpeg` installed on PATH.
|
|
103
|
+
|
|
104
|
+
Then it asks for `AI_GATEWAY_API_KEY` and guides users through optional features:
|
|
105
|
+
|
|
106
|
+
- Composio external app tools.
|
|
107
|
+
- Tavily web research.
|
|
108
|
+
- Upstash Redis memory/job storage.
|
|
109
|
+
- Local background jobs and schedules.
|
|
110
|
+
- Upstash QStash hosted schedules.
|
|
111
|
+
- Composio trigger-to-job workflows.
|
|
112
|
+
- Deepgram realtime voice mode.
|
|
113
|
+
- Local file tool roots.
|
|
114
|
+
- Screenshot/photo vision model.
|
|
115
|
+
- Camera dependency and device setup.
|
|
116
|
+
|
|
117
|
+
Every optional feature can be skipped. If users only want chat, they only need the AI Gateway key.
|
|
118
|
+
|
|
119
|
+
Voice can be managed without opening `.env`:
|
|
120
|
+
|
|
121
|
+
```powershell
|
|
122
|
+
zilmate voice setup
|
|
123
|
+
zilmate voice enable
|
|
124
|
+
zilmate voice disable
|
|
125
|
+
zilmate voice doctor
|
|
126
|
+
zilmate voice devices
|
|
127
|
+
zilmate voice live
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Inside `zilmate talk`, use `/voice` to start a live terminal voice session. Speak naturally, then press Enter to stop voice and return to typed chat:
|
|
131
|
+
|
|
132
|
+
```text
|
|
133
|
+
/voice
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
You can also create `.env` manually:
|
|
137
|
+
|
|
138
|
+
```env
|
|
139
|
+
AI_GATEWAY_API_KEY=your_vercel_ai_gateway_key
|
|
140
|
+
COMPOSIO_API_KEY=your_composio_key
|
|
141
|
+
ZILMATE_USER_ID=zilmate-generated-local-user-id
|
|
142
|
+
TAVILY_API_KEY=your_tavily_key
|
|
143
|
+
UPSTASH_REDIS_REST_URL=
|
|
144
|
+
UPSTASH_REDIS_REST_TOKEN=
|
|
145
|
+
ZILMATE_JOBS_ENABLED=false
|
|
146
|
+
UPSTASH_QSTASH_TOKEN=
|
|
147
|
+
ZILMATE_PUBLIC_JOB_WEBHOOK_URL=
|
|
148
|
+
ZILMATE_JOB_WEBHOOK_SECRET=
|
|
149
|
+
ZILMATE_TRIGGER_WORKFLOWS_ENABLED=false
|
|
150
|
+
DEEPGRAM_API_KEY=
|
|
151
|
+
ZILMATE_VOICE_ENABLED=false
|
|
152
|
+
ZILMATE_VOICE_MODE=agent
|
|
153
|
+
ZILMATE_VOICE_LISTEN_MODEL=flux-general-en
|
|
154
|
+
ZILMATE_VOICE_LISTEN_VERSION=v2
|
|
155
|
+
ZILMATE_VOICE_TTS_MODEL=aura-2-thalia-en
|
|
156
|
+
ZILMATE_VOICE_LANGUAGE=en
|
|
157
|
+
ZILMATE_VOICE_LANGUAGE_HINTS=
|
|
158
|
+
ZILMATE_VOICE_BARGE_IN=true
|
|
159
|
+
ZILMATE_VOICE_INPUT_DEVICE=
|
|
160
|
+
ZILMATE_SCREENSHOT_MODEL=google/gemini-3.1-flash-lite
|
|
161
|
+
ZILMATE_CAMERA_DEVICE=
|
|
162
|
+
ZILMATE_FILE_ROOTS=
|
|
163
|
+
ZILO_MANAGER_MODEL=minimax/minimax-m3
|
|
164
|
+
ZILO_HELP_MODEL=alibaba/qwen3.7-plus
|
|
165
|
+
ZILO_POST_MODEL=alibaba/qwen3.7-plus
|
|
166
|
+
ZILO_IMAGE_DEFAULT_PROVIDER=openai
|
|
167
|
+
ZILO_IMAGE_OPENAI_MODEL=openai/gpt-image-2
|
|
168
|
+
ZILO_IMAGE_GEMINI_MODEL=google/gemini-3-pro-image
|
|
169
|
+
ZILO_IMAGE_MODEL=
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
Composio is optional. If `COMPOSIO_API_KEY` is set, ZilMate creates a stable local `ZILMATE_USER_ID`, reuses Composio sessions per chat session, and lets Composio manage app auth links and connected accounts.
|
|
173
|
+
|
|
174
|
+
Redis is optional. If `UPSTASH_REDIS_REST_URL` and `UPSTASH_REDIS_REST_TOKEN` are set, chat turns, scratchpads, and Composio session ids use Redis. If they are missing, ZilMate falls back to local files under `.zilo-manager/`.
|
|
175
|
+
|
|
176
|
+
Background jobs are optional. Setup explains the difference between local jobs and hosted schedules. Local jobs and local schedules run while `zilmate jobs worker` is running. They do not keep running after a laptop sleeps, shuts down, or loses internet. For hosted schedules that can fire while the local machine is closed, configure QStash plus a public job webhook URL.
|
|
177
|
+
|
|
178
|
+
Realtime voice is optional. If `DEEPGRAM_API_KEY` and `ZILMATE_VOICE_ENABLED=true` are set, ZilMate uses Deepgram Flux for listening/end-of-turn, routes transcripts through the ZilMate manager/tools/subagents, and speaks replies with Deepgram Aura-2 websocket TTS. The default listen model is `flux-general-en` with `v2`. The default spoken voice is `aura-2-thalia-en`. Terminal live voice uses `ffmpeg` for microphone capture and `ffplay` for spoken replies. If the default microphone is not detected, run `zilmate voice devices`, then set `ZILMATE_VOICE_INPUT_DEVICE`.
|
|
179
|
+
|
|
180
|
+
Use `zilmate voice setup` for a focused voice-only wizard. Use `zilmate voice enable` and `zilmate voice disable` to toggle voice later without editing config files.
|
|
181
|
+
|
|
182
|
+
Camera capture is optional. During `zilmate setup`, ZilMate checks for `ffmpeg`, asks before installing it, and then runs a camera readiness check. If the automatic installer is not available, setup keeps going and tells the user to run `zilmate camera doctor`.
|
|
183
|
+
|
|
184
|
+
Local file tools are optional. During setup, users can keep the default current-folder access or add comma-separated roots through `ZILMATE_FILE_ROOTS`.
|
|
185
|
+
|
|
186
|
+
For unattended setup or installers, pass the options directly:
|
|
187
|
+
|
|
188
|
+
```powershell
|
|
189
|
+
zilmate setup --yes --ai-gateway-key <key> --jobs-enabled true
|
|
190
|
+
zilmate setup --yes --ai-gateway-key <key> --composio-key <key> --trigger-workflows-enabled true
|
|
191
|
+
zilmate setup --yes --ai-gateway-key <key> --qstash-token <token> --job-webhook-url https://example.com/api/zilmate/jobs
|
|
192
|
+
zilmate setup --yes --ai-gateway-key <key> --voice-enabled true --deepgram-key <key>
|
|
193
|
+
zilmate setup --yes --ai-gateway-key <key> --voice-input-device "audio=Microphone Array"
|
|
194
|
+
zilmate setup --yes --ai-gateway-key <key> --install-camera-deps true
|
|
195
|
+
zilmate setup --yes --ai-gateway-key <key> --camera-device "video=Integrated Camera"
|
|
196
|
+
zilmate setup --yes --ai-gateway-key <key> --file-roots "C:\Users\me\Documents,C:\work"
|
|
197
|
+
zilmate setup --yes --ai-gateway-key <key> --screenshot-model google/gemini-3.1-flash-lite
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
## Development Commands
|
|
201
|
+
|
|
202
|
+
Use these while working inside the project folder:
|
|
203
|
+
|
|
204
|
+
```powershell
|
|
205
|
+
npm run build
|
|
206
|
+
npm run zilmate -- --help
|
|
207
|
+
npm run zilmate -- setup
|
|
208
|
+
npm run zilmate -- doctor
|
|
209
|
+
npm run zilmate -- config
|
|
210
|
+
npm run zilmate -- models
|
|
211
|
+
npm run zilmate -- apps status
|
|
212
|
+
npm run zilmate -- triggers listen
|
|
213
|
+
npm run zilmate -- triggers types github
|
|
214
|
+
npm run zilmate -- triggers list
|
|
215
|
+
npm run zilmate -- jobs create "Research today's priority updates and summarize them"
|
|
216
|
+
npm run zilmate -- jobs list
|
|
217
|
+
npm run zilmate -- jobs worker --once
|
|
218
|
+
npm run zilmate -- voice doctor
|
|
219
|
+
npm run zilmate -- voice setup
|
|
220
|
+
npm run zilmate -- voice disable
|
|
221
|
+
npm run zilmate -- voice enable
|
|
222
|
+
npm run zilmate -- voice turn "What should I focus on today?"
|
|
223
|
+
npm run zilmate -- remember "Prefers concise support replies"
|
|
224
|
+
npm run zilmate -- recall support
|
|
225
|
+
npm run zilmate -- memory list
|
|
226
|
+
npm run zilmate -- talk
|
|
227
|
+
npm run zilmate -- talk --session launch
|
|
228
|
+
npm run zilmate -- help "why can't a worker apply?"
|
|
229
|
+
npm run zilmate -- post "WhatsApp status for workers in Accra"
|
|
230
|
+
npm run zilmate -- research "Vercel AI SDK ToolLoopAgent"
|
|
231
|
+
npm run zilmate -- image --model openai --size 1024x1024 "ZiloShift launch poster for Ghana workers"
|
|
232
|
+
npm run zilmate -- image --model gemini "ZiloShift launch poster for Ghana workers"
|
|
233
|
+
npm run zilmate -- manager "Create a plan for helping venues post shifts"
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
Shortcut:
|
|
237
|
+
|
|
238
|
+
```powershell
|
|
239
|
+
npm run talk
|
|
240
|
+
npm run doctor
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
## Global CLI
|
|
244
|
+
|
|
245
|
+
For local development, link the command from this folder:
|
|
246
|
+
|
|
247
|
+
```powershell
|
|
248
|
+
npm run build
|
|
249
|
+
npm link
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
Then use ZilMate directly:
|
|
253
|
+
|
|
254
|
+
```powershell
|
|
255
|
+
zilmate --help
|
|
256
|
+
zilmate setup
|
|
257
|
+
zilmate doctor
|
|
258
|
+
zilmate update
|
|
259
|
+
zilmate version
|
|
260
|
+
zilmate env check
|
|
261
|
+
zilmate config
|
|
262
|
+
zilmate talk
|
|
263
|
+
zilmate ping
|
|
264
|
+
zilmate models
|
|
265
|
+
zilmate apps status
|
|
266
|
+
zilmate triggers listen
|
|
267
|
+
zilmate triggers types github
|
|
268
|
+
zilmate triggers create GITHUB_BRANCH_CREATED_TRIGGER --dry-run --owner zester4 --repo zilo-manager
|
|
269
|
+
zilmate triggers create GITHUB_COMMIT_EVENT --owner zester4 --repo zilo-manager
|
|
270
|
+
zilmate triggers list
|
|
271
|
+
zilmate jobs create "Research today's priority updates and summarize them"
|
|
272
|
+
zilmate jobs create "Prepare my weekday morning briefing" --schedule "daily"
|
|
273
|
+
zilmate jobs list
|
|
274
|
+
zilmate jobs status job_xxx
|
|
275
|
+
zilmate jobs logs job_xxx
|
|
276
|
+
zilmate jobs run job_xxx
|
|
277
|
+
zilmate jobs worker
|
|
278
|
+
zilmate jobs cancel job_xxx
|
|
279
|
+
zilmate voice doctor
|
|
280
|
+
zilmate voice config
|
|
281
|
+
zilmate voice setup
|
|
282
|
+
zilmate voice disable
|
|
283
|
+
zilmate voice enable
|
|
284
|
+
zilmate voice turn "Plan my next two hours"
|
|
285
|
+
zilmate voice devices
|
|
286
|
+
zilmate voice live
|
|
287
|
+
zilmate voice agent-probe
|
|
288
|
+
zilmate camera doctor
|
|
289
|
+
zilmate camera list
|
|
290
|
+
zilmate camera capture
|
|
291
|
+
zilmate camera capture --device "video=Integrated Camera"
|
|
292
|
+
zilmate remember "Use a warm but concise support tone"
|
|
293
|
+
zilmate recall support
|
|
294
|
+
zilmate memory list
|
|
295
|
+
zilmate help "worker cannot see shifts"
|
|
296
|
+
zilmate image --model openai --size 1024x1024 "ZiloShift launch poster"
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
## Server SDK
|
|
300
|
+
|
|
301
|
+
ZilMate can also be used as a server-side SDK inside apps, dashboards, API routes, and background jobs. The SDK is server-only because it uses API keys, local/Redis memory, Tavily, Composio, and AI Gateway credentials.
|
|
302
|
+
|
|
303
|
+
```ts
|
|
304
|
+
import { createZilMate } from 'zilmate/server';
|
|
305
|
+
|
|
306
|
+
const zilmate = createZilMate({
|
|
307
|
+
sessionId: 'support-ticket-123',
|
|
308
|
+
});
|
|
309
|
+
|
|
310
|
+
const result = await zilmate.chat({
|
|
311
|
+
message: 'Plan my day, then help me draft a ZiloShift worker update.',
|
|
312
|
+
});
|
|
313
|
+
|
|
314
|
+
console.log(result.text);
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
In Next.js, call ZilMate from an API route or server action, then connect your UI to that endpoint:
|
|
318
|
+
|
|
319
|
+
```ts
|
|
320
|
+
// app/api/zilmate/route.ts
|
|
321
|
+
import { createZilMate } from 'zilmate/server';
|
|
322
|
+
|
|
323
|
+
export async function POST(req: Request) {
|
|
324
|
+
const { message, sessionId } = await req.json();
|
|
325
|
+
const zilmate = createZilMate({ sessionId });
|
|
326
|
+
const result = await zilmate.chat({ message });
|
|
327
|
+
|
|
328
|
+
return Response.json(result);
|
|
329
|
+
}
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
Available SDK methods:
|
|
333
|
+
|
|
334
|
+
- `chat({ message })`: general personal assistant backed by the manager agent.
|
|
335
|
+
- `manager({ message | prompt })`: explicit manager orchestration.
|
|
336
|
+
- `help({ question | message })`: fast ZiloShift troubleshooting.
|
|
337
|
+
- `guide({ message })`: ZiloShift workflow conversation.
|
|
338
|
+
- `post({ prompt })`: WhatsApp/status/social copy.
|
|
339
|
+
- `research({ query | message })`: local docs and web research.
|
|
340
|
+
- `image({ prompt, provider, size, outputDir })`: image generation.
|
|
341
|
+
- `remember({ text, tags })`, `recall({ query, limit })`, `listMemories()`, `forget(id)`, `clearMemories()`: durable memory helpers.
|
|
342
|
+
- `createJob({ task, schedule, source, metadata })`, `listJobs({ status, limit })`, `getJob(id)`, `getJobLogs(id)`, `runJob(id)`, `runDueJobs()`, `handleJobWebhook({ jobId, secret }, expectedSecret)`, `cancelJob(id)`: background job and hosted webhook helpers.
|
|
343
|
+
- `getVoiceConfig()`, `startVoiceSession({ audio, onEvent, sessionId })`: Deepgram realtime voice configuration and Agent API session helpers.
|
|
344
|
+
|
|
345
|
+
For UI integrations, pass `onProgress` to render agent/tool progress and `confirm` to approve or block external write-like Composio actions.
|
|
346
|
+
|
|
347
|
+
## Command Shape
|
|
348
|
+
|
|
349
|
+
- `talk`: persistent interactive chat with the main manager agent. This is the best mode for normal use and renders rich terminal Markdown.
|
|
350
|
+
- `manager`: one-shot manager orchestration. It can delegate to subagents and use scratchpad tools.
|
|
351
|
+
- `doctor`: check local setup, required/optional keys, Node version, memory folder, Redis completeness, and optional live Gateway/Composio status with `--live`.
|
|
352
|
+
- `env check`: environment-readiness alias for `doctor`.
|
|
353
|
+
- `config`: sanitized config summary without secrets.
|
|
354
|
+
- `remember`: save durable long-term memory.
|
|
355
|
+
- `recall`: search durable long-term memory.
|
|
356
|
+
- `forget`: delete one memory by id, or use `--all`.
|
|
357
|
+
- `memory list`: list saved durable memories.
|
|
358
|
+
- `apps status`: show whether Composio is configured, the local `ZILMATE_USER_ID`, the current Composio session id, and connected/available toolkit status when the SDK can fetch it.
|
|
359
|
+
- `triggers listen`: stream Composio trigger events into the terminal until Ctrl+C.
|
|
360
|
+
- `triggers types [toolkit]`: list available trigger types, optionally for one toolkit.
|
|
361
|
+
- `triggers info <trigger>`: show trigger config and payload schemas.
|
|
362
|
+
- `triggers create <trigger> --flag value`: create a trigger instance; unknown flags become trigger config.
|
|
363
|
+
- `triggers list`: list trigger instances.
|
|
364
|
+
- `jobs create "<task>"`: queue a background job, optionally with `--schedule "daily"` or `--schedule "every 15 minutes"`.
|
|
365
|
+
- `jobs list`: list queued/running/completed jobs.
|
|
366
|
+
- `jobs status <id>`: inspect one job.
|
|
367
|
+
- `jobs logs <id>`: inspect job progress, output, and errors.
|
|
368
|
+
- `jobs run <id>`: run a queued job immediately.
|
|
369
|
+
- `jobs worker`: run the local job processor and local scheduler.
|
|
370
|
+
- `jobs cancel <id>`: cancel one job.
|
|
371
|
+
- `camera doctor`: check OS, ffmpeg availability, detected camera devices, and fallback candidates.
|
|
372
|
+
- `camera list`: list camera device names ZilMate can try.
|
|
373
|
+
- `camera capture`: capture one still image, with retry across common device names unless `--device` is provided.
|
|
374
|
+
- `help`: fast troubleshooting and app guidance.
|
|
375
|
+
- `chat`: one-shot natural dialogue about ZiloShift workflows.
|
|
376
|
+
- `post`: WhatsApp/status/social copy generation.
|
|
377
|
+
- `research`: local docs, allowlisted docs, Tavily search/extract/map/crawl/deep research, and sourced summaries.
|
|
378
|
+
- `image`: Gateway image generation that saves files under `outputs/images/`. Use `--model openai|chatgpt|gemini` and optionally `--size 1024x1024` for OpenAI.
|
|
379
|
+
- `models`: selected models, Gateway availability warnings, and active memory backend.
|
|
380
|
+
- `ping`: tiny Gateway text call to verify auth.
|
|
381
|
+
- `setup`: interactive `.env` setup for the required AI Gateway key, optional Composio external app tools, optional Tavily search, optional Redis memory, and model defaults.
|
|
382
|
+
|
|
383
|
+
## Agent Architecture
|
|
384
|
+
|
|
385
|
+
ZilMate uses a manager agent that delegates to focused subagents and external tools:
|
|
386
|
+
|
|
387
|
+
- Quick Help: short troubleshooting and app usage guidance.
|
|
388
|
+
- Chat: broader ZiloShift workflow conversation.
|
|
389
|
+
- Post: launch messages, WhatsApp statuses, captions, and outreach copy.
|
|
390
|
+
- Research: local Zilo docs first, then external docs/web research when needed.
|
|
391
|
+
- Image: image generation through Gateway image models.
|
|
392
|
+
- Automation Planner: background jobs, schedules, trigger workflows, QStash/webhook planning, monitoring, and follow-up automations.
|
|
393
|
+
- Personal Assistant: daily planning, reminders, briefings, prioritization, follow-ups, summaries, and memory-aware organization.
|
|
394
|
+
- Developer Helper: CLI/SDK usage, Next.js integration, publishing, QStash, Cloudflare tunnels, webhooks, Composio setup, and debugging.
|
|
395
|
+
- Composio: external app discovery, auth links, schemas, and execution, attached only to the manager.
|
|
396
|
+
- Memory: durable ZilMate facts and preferences saved locally or in Redis, available through CLI commands and manager tools.
|
|
397
|
+
- Jobs: background task creation, schedule setup, status checks, logs, and cancellation available through CLI, SDK, and manager tools.
|
|
398
|
+
- Files: local file search, safe reading, approved writes, folder creation, move/copy/rename, document summaries, folder-change snapshots, and duplicate/large-file audits.
|
|
399
|
+
- Desktop: approved clipboard access, screenshot capture, laptop camera still capture, and Gemini-powered screenshot/photo understanding. Ask naturally inside `zilmate talk`, such as "look at my screen and explain the error", "look through my camera and describe this device", "search this folder for billing docs", or "copy that command to my clipboard".
|
|
400
|
+
|
|
401
|
+
Camera capture requires `ffmpeg` on PATH. On Windows, install with `winget install Gyan.FFmpeg`; on macOS, use `brew install ffmpeg`; on Linux, install `ffmpeg` from your package manager. Run `zilmate camera doctor` to verify OS support and `zilmate camera list` to get exact device names. If Windows reports a custom camera name, set `ZILMATE_CAMERA_DEVICE=video=Your Camera Name` or pass `--device "video=Your Camera Name"`. Clipboard, screenshot, and camera access always ask for approval in agent mode, and can be approved for the current session with `s=session`.
|
|
402
|
+
|
|
403
|
+
Local ZiloShift docs live under `src/doc/`. ZilMate reads them on demand through dedicated tools instead of dumping all docs into every prompt. The manager prefers these local docs for ZiloShift support, worker, venue, payment, verification, SMS, and dispute questions.
|
|
404
|
+
|
|
405
|
+
## External Apps With Composio
|
|
406
|
+
|
|
407
|
+
Run setup and add a Composio key:
|
|
408
|
+
|
|
409
|
+
```powershell
|
|
410
|
+
zilmate setup
|
|
411
|
+
zilmate apps status
|
|
412
|
+
```
|
|
413
|
+
|
|
414
|
+
In `zilmate talk`, ask for the external task naturally. If an account is not connected yet, ZilMate uses Composio connection tools and prints the connect link returned by Composio. ZilMate does not implement custom OAuth flows.
|
|
415
|
+
|
|
416
|
+
Read/search/schema/auth-link tools can run without confirmation. Write-like external app actions such as create, update, delete, send, post, publish, invite, transfer, charge, refund, cancel, approve, revoke, workbench, or bash require `Proceed? (y/N)` in the terminal. In noninteractive mode, write-like actions are blocked.
|
|
417
|
+
|
|
418
|
+
## Trigger Events
|
|
419
|
+
|
|
420
|
+
For live terminal events, use Composio trigger listening:
|
|
421
|
+
|
|
422
|
+
```powershell
|
|
423
|
+
zilmate triggers types github
|
|
424
|
+
zilmate triggers create GITHUB_COMMIT_EVENT --owner zester4 --repo zilo-manager
|
|
425
|
+
zilmate triggers listen
|
|
426
|
+
```
|
|
427
|
+
|
|
428
|
+
`listen` streams matching trigger events until Ctrl+C. Use filters when needed:
|
|
429
|
+
|
|
430
|
+
```powershell
|
|
431
|
+
zilmate triggers listen --toolkit gmail
|
|
432
|
+
zilmate triggers listen --trigger ti_abc123
|
|
433
|
+
zilmate triggers listen --trigger-slug GMAIL_NEW_EMAIL_EVENT --once
|
|
434
|
+
```
|
|
435
|
+
|
|
436
|
+
This is terminal-local. When `ZILMATE_TRIGGER_WORKFLOWS_ENABLED=true`, trigger events handled by `zilmate triggers listen` also create background jobs. ZilMate includes generic workflow prompts for Gmail, GitHub, Slack, and calendar-style events, and falls back to a general external-app summary task for other toolkits.
|
|
437
|
+
|
|
438
|
+
The manager agent also has trigger tools. In `zilmate talk`, you can ask:
|
|
439
|
+
|
|
440
|
+
```text
|
|
441
|
+
show me GitHub trigger types
|
|
442
|
+
prepare a branch-created trigger for zester4/zilo-manager
|
|
443
|
+
create that trigger
|
|
444
|
+
```
|
|
445
|
+
|
|
446
|
+
ZilMate should discover current trigger slugs first, inspect the trigger schema, prefer a dry-run payload, and ask for confirmation before creating a real trigger.
|
|
447
|
+
|
|
448
|
+
## Background Jobs And Schedules
|
|
449
|
+
|
|
450
|
+
Use jobs when ZilMate should keep working after a chat turn ends:
|
|
451
|
+
|
|
452
|
+
```powershell
|
|
453
|
+
zilmate jobs create "Research AI assistant scheduling patterns and save a summary"
|
|
454
|
+
zilmate jobs create "Prepare my morning briefing" --schedule daily
|
|
455
|
+
zilmate jobs worker
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
Local job storage uses `.zilo-manager/jobs.json` and `.zilo-manager/job-logs.json` unless Redis is configured. With Redis, jobs and logs use the same Upstash REST connection as memory.
|
|
459
|
+
|
|
460
|
+
Schedules supported locally include `hourly`, `daily`, `every 15 minutes`, `every 2 hours`, `every 1 day`, and ISO date/time strings. QStash schedules can use `cron:<expression>` when `UPSTASH_QSTASH_TOKEN` and `ZILMATE_PUBLIC_JOB_WEBHOOK_URL` are configured.
|
|
461
|
+
|
|
462
|
+
Hosted apps can expose a webhook route and call:
|
|
463
|
+
|
|
464
|
+
```ts
|
|
465
|
+
import { createZilMate } from 'zilmate/server';
|
|
466
|
+
|
|
467
|
+
export async function POST(req: Request) {
|
|
468
|
+
const body = await req.json();
|
|
469
|
+
const zilmate = createZilMate();
|
|
470
|
+
const result = await zilmate.handleJobWebhook(
|
|
471
|
+
{ jobId: body.jobId, secret: req.headers.get('ZilMate-Webhook-Secret') ?? undefined },
|
|
472
|
+
process.env.ZILMATE_JOB_WEBHOOK_SECRET,
|
|
473
|
+
);
|
|
474
|
+
|
|
475
|
+
return Response.json(result);
|
|
476
|
+
}
|
|
477
|
+
```
|
|
478
|
+
|
|
479
|
+
## Model Notes
|
|
480
|
+
|
|
481
|
+
- Manager/orchestration default: `minimax/minimax-m3`.
|
|
482
|
+
- Recommended help/post override: `alibaba/qwen3.7-plus` in `.env`.
|
|
483
|
+
- If help/post env vars are blank, ZilMate falls back to the internal cheap-model list in `src/config/models.ts`.
|
|
484
|
+
- Default image provider: OpenAI GPT Image 2 via `openai/gpt-image-2` and AI SDK `generateImage`.
|
|
485
|
+
- Alternate image provider: Gemini 3 Pro Image via `google/gemini-3-pro-image` and `generateText` file outputs.
|
|
486
|
+
- GPT-2 is not used for images.
|
|
487
|
+
|
|
488
|
+
## Research And Memory
|
|
489
|
+
|
|
490
|
+
- Zilo docs are searched/read locally first for product behavior.
|
|
491
|
+
- Tavily powers web search, URL extraction, site mapping, small capped crawls, and deep research.
|
|
492
|
+
- Web crawling and deep research are intentionally heavier tools and should be used only when local docs/search are not enough.
|
|
493
|
+
- Scratchpads keep intermediate notes outside the main prompt context.
|
|
494
|
+
- Long-term memory stores stable preferences and durable project facts. Use `zilmate remember`, `zilmate recall`, `zilmate forget`, and `zilmate memory list`.
|
|
495
|
+
- `zilmate talk` automatically recalls relevant long-term memories for each message.
|
|
496
|
+
- Redis is optional; local file memory is the fallback.
|
|
497
|
+
- `zilmate setup` creates or updates the local `.env` used by the CLI.
|
|
498
|
+
|
|
499
|
+
## Safety Notes
|
|
500
|
+
|
|
501
|
+
ZilMate can guide, research, draft, generate assets, and run approved external app actions through Composio. It should not claim that live external or ZiloShift data changed unless a tool result confirms it.
|
|
502
|
+
|
|
503
|
+
Before adding real actions around payments, identity, SMS, users, or admin operations, add stronger permission levels, confirmation gates, audit logs, and behavioral evals.
|