myaiforone 1.0.0 → 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.
- package/.claude/commands/MyAgentSkillCreate.md +300 -0
- package/.claude/commands/onboarding.md +162 -0
- package/.claude/commands/opAgents_AddNew.md +248 -0
- package/.claude/commands/opcompact.md +47 -0
- package/.claude/commands/opreset.md +25 -0
- package/.claude/commands/setup.md +294 -0
- package/agents/platform/gym/CLAUDE.md +32 -0
- package/agents/platform/gym/agent.json +2 -2
- package/agents/platform/gym/programs/ai-tools-onboarding/program.json +202 -0
- package/agents/platform/gym/programs/using-myaiforone/program.json +229 -0
- package/agents/platform/hub/CLAUDE.md +9 -0
- package/config.example.json +18 -0
- package/dist/executor.d.ts.map +1 -1
- package/dist/executor.js +2 -1
- package/dist/executor.js.map +1 -1
- package/dist/web-ui.d.ts.map +1 -1
- package/dist/web-ui.js +27 -21
- package/dist/web-ui.js.map +1 -1
- package/docs/CrossAgentObserverArchitecture.md +148 -0
- package/package.json +2 -1
- package/public/admin.html +0 -3
- package/public/agent-dashboard.html +0 -2
- package/public/changelog.html +0 -2
- package/public/gym.html +38 -1
- package/public/home.html +0 -2
- package/public/home2.html +3303 -0
- package/public/index.html +0 -2
- package/public/lab.html +0 -2
- package/public/library.html +0 -2
- package/public/marketplace.html +0 -2
- package/public/monitor.html +0 -2
- package/public/org.html +0 -2
- package/public/projects.html +0 -2
- package/public/settings.html +0 -2
- package/public/tasks.html +0 -2
- package/public/user-guide.html +0 -2
- package/src/executor.ts +2 -1
- package/src/web-ui.ts +26 -19
- package/agents/platform/gym/programs/agent-building/program.json +0 -160
- package/agents/platform/gym/programs/automations-mastery/program.json +0 -129
- package/agents/platform/gym/programs/getting-started/program.json +0 -124
- package/agents/platform/gym/programs/mcp-integrations/program.json +0 -116
- package/agents/platform/gym/programs/multi-model-strategy/program.json +0 -115
- package/agents/platform/gym/programs/prompt-engineering/program.json +0 -136
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: MyAgentSkillCreate
|
|
3
|
+
description: Create skills for the MyAgent platform with proper placement (global, org, agent), optional processing scripts, and registry integration. Use when building reusable skills for agents on this platform.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# MyAgent Skill Creator
|
|
7
|
+
|
|
8
|
+
Create skills for the MyAgent (MyAIforOne) platform. This skill understands the platform's multi-level skill system and ensures skills are properly structured, placed, and discoverable.
|
|
9
|
+
|
|
10
|
+
## Skill Levels
|
|
11
|
+
|
|
12
|
+
Skills live at 4 levels. Ask the user which level makes sense:
|
|
13
|
+
|
|
14
|
+
| Level | Location | Who sees it | When to use |
|
|
15
|
+
|-------|----------|-------------|-------------|
|
|
16
|
+
| **Global** | `~/.claude/commands/` | All Claude sessions + all agents | Platform utilities, cross-cutting ops |
|
|
17
|
+
| **Personal** | `~/Desktop/MyAIforOne Drive/PersonalAgents/skills/` | All agents via shared index | User's custom skills not tied to an org |
|
|
18
|
+
| **Org-scoped** | `~/Desktop/MyAIforOne Drive/PersonalAgents/{OrgName}/skills/` | All agents in that org (auto-discovered, marked ◆) | Domain skills shared within a team/org |
|
|
19
|
+
| **Agent-specific** | `~/Desktop/MyAIforOne Drive/PersonalAgents/{OrgName}/{agentId}/skills/` or `{agentHome}/skills/` | Only that agent (marked ★) | Highly specific workflows for one agent |
|
|
20
|
+
|
|
21
|
+
If the user says "for this org" or names an org → **org-scoped**.
|
|
22
|
+
If the user says "for this agent" or names an agent → **agent-specific**.
|
|
23
|
+
If unclear → ask.
|
|
24
|
+
|
|
25
|
+
## Skill Structure Convention
|
|
26
|
+
|
|
27
|
+
Every skill MUST follow this structure:
|
|
28
|
+
|
|
29
|
+
### Simple skill (instructions only)
|
|
30
|
+
```
|
|
31
|
+
skills/
|
|
32
|
+
└── my_skill.md # Skill definition with frontmatter
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Skill with processing scripts
|
|
36
|
+
```
|
|
37
|
+
skills/
|
|
38
|
+
├── my_skill.md # Skill definition (references scripts)
|
|
39
|
+
└── my_skill/ # Scripts folder (same name as .md, no extension)
|
|
40
|
+
├── process.py # Reusable processing script
|
|
41
|
+
├── helpers.sh # Helper scripts
|
|
42
|
+
└── templates/ # Templates, configs, etc.
|
|
43
|
+
└── output_template.xlsx
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
**Convention rules:**
|
|
47
|
+
- The scripts folder MUST share the exact name as the `.md` file (minus extension)
|
|
48
|
+
- Scripts folder lives in the SAME directory as the `.md` file
|
|
49
|
+
- Scripts are **permanent and reusable** — never regenerated on each run
|
|
50
|
+
- The `.md` file references scripts by **relative path**: `{scripts}/process.py`
|
|
51
|
+
- Scripts accept CLI arguments for inputs/outputs — never hardcode paths
|
|
52
|
+
- Scripts should be executable and self-contained (include shebangs, dependency checks)
|
|
53
|
+
|
|
54
|
+
## Frontmatter Format
|
|
55
|
+
|
|
56
|
+
Every skill `.md` file MUST start with YAML frontmatter:
|
|
57
|
+
|
|
58
|
+
```yaml
|
|
59
|
+
---
|
|
60
|
+
name: skill_name_snake_case
|
|
61
|
+
description: >-
|
|
62
|
+
One-line description of what this skill does.
|
|
63
|
+
Include WHEN to use it and WHAT triggers it.
|
|
64
|
+
scripts: skill_name_snake_case/ # Only if skill has a scripts folder
|
|
65
|
+
allowed-tools: Bash Read Write # Optional: space-separated tool restrictions
|
|
66
|
+
---
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
**Rules:**
|
|
70
|
+
- `name`: snake_case, matches filename without `.md`
|
|
71
|
+
- `description`: Critical — this is what tells Claude WHEN to invoke the skill. Be specific about triggers and use cases. Keep under 200 chars.
|
|
72
|
+
- `scripts`: Optional. Relative path to the scripts subfolder. Only include if the skill has processing scripts.
|
|
73
|
+
- `allowed-tools`: Optional. Space-separated list of tools the skill needs.
|
|
74
|
+
|
|
75
|
+
## Creation Process
|
|
76
|
+
|
|
77
|
+
### Step 1 — Gather Requirements
|
|
78
|
+
|
|
79
|
+
Ask the user (1-2 questions at a time, be conversational):
|
|
80
|
+
|
|
81
|
+
1. **What does the skill do?** Get a clear description of the workflow.
|
|
82
|
+
2. **Which level?** Global / Org / Agent? If org or agent, which one?
|
|
83
|
+
3. **Does it need scripts?** Will it run processing code (Python, shell, Node, etc.)?
|
|
84
|
+
4. **What are the inputs/outputs?** Files? User text? API calls?
|
|
85
|
+
5. **How is it triggered?** User types a command? Agent auto-detects? Scheduled?
|
|
86
|
+
|
|
87
|
+
If the user gives everything in one message, skip the conversation and build it.
|
|
88
|
+
|
|
89
|
+
### Step 2 — Determine Placement
|
|
90
|
+
|
|
91
|
+
Based on the level chosen:
|
|
92
|
+
|
|
93
|
+
| Level | Write `.md` to | Write scripts to |
|
|
94
|
+
|-------|----------------|-----------------|
|
|
95
|
+
| Global | `~/.claude/commands/{name}.md` | `~/.claude/commands/{name}/` |
|
|
96
|
+
| Personal | `~/Desktop/MyAIforOne Drive/PersonalAgents/skills/{name}.md` | `~/Desktop/MyAIforOne Drive/PersonalAgents/skills/{name}/` |
|
|
97
|
+
| Org-scoped | `~/Desktop/MyAIforOne Drive/PersonalAgents/{OrgName}/skills/{name}.md` | `~/Desktop/MyAIforOne Drive/PersonalAgents/{OrgName}/skills/{name}/` |
|
|
98
|
+
| Agent-specific | `{agentHome}/skills/{name}.md` | `{agentHome}/skills/{name}/` |
|
|
99
|
+
|
|
100
|
+
To find an agent's home directory, read config.json:
|
|
101
|
+
```bash
|
|
102
|
+
cat ~/Desktop/APPs/channelToAgentToClaude/config.json | python3 -c "
|
|
103
|
+
import json,sys
|
|
104
|
+
c = json.load(sys.stdin)
|
|
105
|
+
for aid, a in c.get('agents',{}).items():
|
|
106
|
+
print(f'{aid}: {a.get(\"agentHome\", \"(not set)\")}')"
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
To find an org's agents:
|
|
110
|
+
```bash
|
|
111
|
+
cat ~/Desktop/APPs/channelToAgentToClaude/config.json | python3 -c "
|
|
112
|
+
import json,sys
|
|
113
|
+
c = json.load(sys.stdin)
|
|
114
|
+
for aid, a in c.get('agents',{}).items():
|
|
115
|
+
orgs = [o['organization'] for o in a.get('org',[])]
|
|
116
|
+
if orgs: print(f'{aid}: {orgs}')"
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### Step 3 — Write the Skill
|
|
120
|
+
|
|
121
|
+
1. **Create the `.md` file** with proper frontmatter and clear instructions
|
|
122
|
+
2. **If scripts needed:** Create the scripts subfolder and write the script(s)
|
|
123
|
+
3. Scripts must:
|
|
124
|
+
- Accept all file paths as CLI arguments (never hardcode)
|
|
125
|
+
- Include a `--help` flag that explains usage
|
|
126
|
+
- Include dependency checks at the top (e.g., `import` guards with helpful error messages)
|
|
127
|
+
- Use `argparse` (Python), `getopts` (bash), or similar for argument parsing
|
|
128
|
+
- Print progress and results to stdout
|
|
129
|
+
- Exit with non-zero code on error
|
|
130
|
+
|
|
131
|
+
### Step 4 — Wire the Skill to Agent(s)
|
|
132
|
+
|
|
133
|
+
For **org-scoped** and **global** skills: No config changes needed — they're auto-discovered.
|
|
134
|
+
|
|
135
|
+
For **agent-specific** skills: Add the skill name to the agent's `agentSkills` array in config.json:
|
|
136
|
+
```python
|
|
137
|
+
import json
|
|
138
|
+
with open('config.json') as f: c = json.load(f)
|
|
139
|
+
skills = c['agents']['AGENT_ID'].get('agentSkills', [])
|
|
140
|
+
if 'SKILL_NAME' not in skills:
|
|
141
|
+
skills.append('SKILL_NAME')
|
|
142
|
+
c['agents']['AGENT_ID']['agentSkills'] = skills
|
|
143
|
+
with open('config.json', 'w') as f: json.dump(c, f, indent=2)
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
For **shared** skills referenced explicitly: Add to the agent's `skills` array instead.
|
|
147
|
+
|
|
148
|
+
### Step 5 — Verify
|
|
149
|
+
|
|
150
|
+
1. Confirm the file exists at the right path
|
|
151
|
+
2. Confirm frontmatter parses correctly (name and description present)
|
|
152
|
+
3. If scripts exist, confirm the subfolder is named correctly
|
|
153
|
+
4. If agent-specific, confirm it's in the agent's config
|
|
154
|
+
5. Print summary:
|
|
155
|
+
```
|
|
156
|
+
Skill Created:
|
|
157
|
+
Name: {name}
|
|
158
|
+
Level: {level}
|
|
159
|
+
Location: {path}
|
|
160
|
+
Scripts: {scripts_path or "none"}
|
|
161
|
+
Discoverable by: {who can see it}
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
## Script Conventions (when scripts are needed)
|
|
165
|
+
|
|
166
|
+
### Python scripts
|
|
167
|
+
```python
|
|
168
|
+
#!/usr/bin/env python3
|
|
169
|
+
"""Short description of what this script does."""
|
|
170
|
+
import argparse
|
|
171
|
+
import sys
|
|
172
|
+
|
|
173
|
+
def main():
|
|
174
|
+
parser = argparse.ArgumentParser(description=__doc__)
|
|
175
|
+
parser.add_argument('--input', required=True, help='Path to input file')
|
|
176
|
+
parser.add_argument('--output', required=True, help='Path to output file')
|
|
177
|
+
# ... more args
|
|
178
|
+
args = parser.parse_args()
|
|
179
|
+
|
|
180
|
+
# Processing logic here
|
|
181
|
+
print(f"Processing {args.input}...")
|
|
182
|
+
# ...
|
|
183
|
+
print(f"Output written to {args.output}")
|
|
184
|
+
|
|
185
|
+
if __name__ == '__main__':
|
|
186
|
+
main()
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### Shell scripts
|
|
190
|
+
```bash
|
|
191
|
+
#!/usr/bin/env bash
|
|
192
|
+
set -euo pipefail
|
|
193
|
+
|
|
194
|
+
usage() { echo "Usage: $0 --input FILE --output FILE" >&2; exit 1; }
|
|
195
|
+
|
|
196
|
+
INPUT="" OUTPUT=""
|
|
197
|
+
while [[ $# -gt 0 ]]; do
|
|
198
|
+
case $1 in
|
|
199
|
+
--input) INPUT="$2"; shift 2;;
|
|
200
|
+
--output) OUTPUT="$2"; shift 2;;
|
|
201
|
+
--help) usage;;
|
|
202
|
+
*) usage;;
|
|
203
|
+
esac
|
|
204
|
+
done
|
|
205
|
+
|
|
206
|
+
[[ -z "$INPUT" || -z "$OUTPUT" ]] && usage
|
|
207
|
+
|
|
208
|
+
# Processing logic here
|
|
209
|
+
echo "Processing $INPUT..."
|
|
210
|
+
echo "Output written to $OUTPUT"
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### Node.js scripts
|
|
214
|
+
```javascript
|
|
215
|
+
#!/usr/bin/env node
|
|
216
|
+
const { parseArgs } = require('node:util');
|
|
217
|
+
const { values } = parseArgs({
|
|
218
|
+
options: {
|
|
219
|
+
input: { type: 'string' },
|
|
220
|
+
output: { type: 'string' },
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
if (!values.input || !values.output) {
|
|
224
|
+
console.error('Usage: node script.js --input FILE --output FILE');
|
|
225
|
+
process.exit(1);
|
|
226
|
+
}
|
|
227
|
+
// Processing logic here
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
## How the .md References Scripts
|
|
231
|
+
|
|
232
|
+
In the skill body, reference the script using the `{scripts}` placeholder or the relative path convention:
|
|
233
|
+
|
|
234
|
+
```markdown
|
|
235
|
+
## Execution
|
|
236
|
+
|
|
237
|
+
Run the processing script:
|
|
238
|
+
` ``bash
|
|
239
|
+
python3 {skill_dir}/process.py \
|
|
240
|
+
--input "$INPUT_FILE" \
|
|
241
|
+
--output "$OUTPUT_FILE" \
|
|
242
|
+
--date "$(date +%Y-%m-%d)"
|
|
243
|
+
` ``
|
|
244
|
+
|
|
245
|
+
Where `{skill_dir}` is the scripts folder next to this .md file (same name, no extension).
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
Or reference explicitly:
|
|
249
|
+
```markdown
|
|
250
|
+
The processing script lives at the same level as this file, in the `weekly_wallet_update/` folder.
|
|
251
|
+
Run: `python3 /path/to/skills/weekly_wallet_update/process_update.py --mwi INPUT --tres TRESDATA --fb FIREBLOCKS --map TOKENMAP --output OUTPUT`
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
## Examples
|
|
255
|
+
|
|
256
|
+
### Example: Simple skill (no scripts)
|
|
257
|
+
```yaml
|
|
258
|
+
---
|
|
259
|
+
name: code_review_checklist
|
|
260
|
+
description: Run through a standardized code review checklist for PRs. Use when reviewing code changes.
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
# Code Review Checklist
|
|
264
|
+
|
|
265
|
+
When reviewing code, check each item...
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
### Example: Skill with Python processing script
|
|
269
|
+
```yaml
|
|
270
|
+
---
|
|
271
|
+
name: weekly_wallet_update
|
|
272
|
+
description: Weekly update of Total Quantity and Value (USD) in the MWI w Balance tab using TRESDATA and Fireblocks sources.
|
|
273
|
+
scripts: weekly_wallet_update/
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
# Weekly Wallet Inventory Update
|
|
277
|
+
|
|
278
|
+
## Execution
|
|
279
|
+
|
|
280
|
+
The user will attach 4 files. Run the processing script:
|
|
281
|
+
|
|
282
|
+
` ``bash
|
|
283
|
+
python3 {skill_dir}/process_update.py \
|
|
284
|
+
--mwi "path/to/master_wallet.xlsx" \
|
|
285
|
+
--tresdata "path/to/tresdata.csv" \
|
|
286
|
+
--fireblocks "path/to/fireblocks.csv" \
|
|
287
|
+
--tokenmap "path/to/token_map.csv" \
|
|
288
|
+
--output "path/to/output.xlsx"
|
|
289
|
+
` ``
|
|
290
|
+
|
|
291
|
+
Review the output summary and share results with the user.
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
## Important Notes
|
|
295
|
+
|
|
296
|
+
- Skills under 500 lines. If longer, split into the `.md` (instructions) and scripts (logic).
|
|
297
|
+
- Scripts are the RIGHT place for deterministic processing. The `.md` is for instructions, context, and orchestration.
|
|
298
|
+
- Never generate throwaway scripts in FileStorage/Temp. Always use the permanent scripts folder.
|
|
299
|
+
- If a skill evolves, update the script in place — it's version-controlled by the folder structure.
|
|
300
|
+
- Org-scoped skills are auto-discovered — no config.json changes needed for agents in that org.
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: onboarding
|
|
3
|
+
description: Walk a first-time user through connecting messaging channels and creating their first agent. Used by the hub agent after /setup completes.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# First-Time Onboarding
|
|
7
|
+
|
|
8
|
+
You are walking a new user through setting up MyAIforOne for the first time. They've just completed the terminal setup and are now in the web UI chatting with you. Your job is to connect their messaging channels and create their first personal agent.
|
|
9
|
+
|
|
10
|
+
## Tone
|
|
11
|
+
|
|
12
|
+
Friendly, clear, one step at a time. Don't overwhelm. Celebrate each step completed.
|
|
13
|
+
|
|
14
|
+
## Step 1: Welcome
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
Welcome to MyAIforOne! I'm your hub agent — I'll help you get connected.
|
|
18
|
+
|
|
19
|
+
We'll do two things:
|
|
20
|
+
1. Connect a messaging channel (so you can chat with agents from your phone)
|
|
21
|
+
2. Create your first personal agent
|
|
22
|
+
|
|
23
|
+
This takes about 2 minutes. Let's go!
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Step 2: Choose Channels
|
|
27
|
+
|
|
28
|
+
Ask which channels they want. Present as a simple list:
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
Which messaging apps do you want to use with your agents?
|
|
32
|
+
|
|
33
|
+
1. Telegram (easiest — just need a bot token)
|
|
34
|
+
2. WhatsApp (QR code pairing)
|
|
35
|
+
3. Slack (needs a Slack App)
|
|
36
|
+
4. iMessage (macOS only — skip this option on Windows)
|
|
37
|
+
|
|
38
|
+
Pick one or more, or type "skip" to set up channels later.
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Step 3: Configure Each Channel
|
|
42
|
+
|
|
43
|
+
### Telegram
|
|
44
|
+
1. Tell them: "Open Telegram, message @BotFather, send /newbot, follow the prompts, and paste the bot token here."
|
|
45
|
+
2. When they paste the token, call `update_channel` with:
|
|
46
|
+
- channelName: "telegram"
|
|
47
|
+
- config: { botToken: "<their token>" }
|
|
48
|
+
3. Call `restart_service` to pick up the change.
|
|
49
|
+
4. Tell them: "Telegram connected! Now send any message to your bot — I'll grab the chat ID."
|
|
50
|
+
5. Wait for them to confirm they sent a message.
|
|
51
|
+
6. Check logs for "No route for telegram:" to find the chat ID. Use Bash:
|
|
52
|
+
- **macOS / Linux:** `grep "No route for telegram:" logs/service.log | tail -5`
|
|
53
|
+
- **Windows:** `Select-String "No route for telegram:" logs\service.log | Select-Object -Last 5`
|
|
54
|
+
7. Save the chat ID for Step 5.
|
|
55
|
+
|
|
56
|
+
### Slack
|
|
57
|
+
1. Tell them:
|
|
58
|
+
- Go to https://api.slack.com/apps → Create New App
|
|
59
|
+
- Enable Socket Mode (Settings → Socket Mode → Enable)
|
|
60
|
+
- Add scopes: chat:write, channels:history, groups:history, im:history, files:read
|
|
61
|
+
- Install to workspace
|
|
62
|
+
- Copy Bot Token (xoxb-) and App Token (xapp-)
|
|
63
|
+
2. When they paste both tokens, call `update_channel` with:
|
|
64
|
+
- channelName: "slack"
|
|
65
|
+
- config: { botToken: "<xoxb>", appToken: "<xapp>", mode: "socket" }
|
|
66
|
+
3. Call `restart_service`.
|
|
67
|
+
4. Tell them: "Slack connected! Now invite the bot to a channel (/invite @botname) and send a message."
|
|
68
|
+
5. Ask them to paste the channel ID (right-click channel → View details → scroll to bottom).
|
|
69
|
+
|
|
70
|
+
### WhatsApp
|
|
71
|
+
1. Tell them: "WhatsApp needs a QR code scan. I'll start the pairing process."
|
|
72
|
+
2. Call `update_channel` with:
|
|
73
|
+
- channelName: "whatsapp"
|
|
74
|
+
- config: { authDir: "./data/whatsapp-auth" }
|
|
75
|
+
3. Call `restart_service`.
|
|
76
|
+
4. Tell them: "Check your terminal — there should be a QR code. Open WhatsApp → Settings → Linked Devices → Link a Device → scan it."
|
|
77
|
+
5. Once connected, tell them: "Send a message in the WhatsApp chat you want to use. I'll find the chat ID."
|
|
78
|
+
6. Check logs for "No route for whatsapp:" to find the chat ID. Use Bash:
|
|
79
|
+
- **macOS / Linux:** `grep "No route for whatsapp:" logs/service.log | tail -5`
|
|
80
|
+
- **Windows:** `Select-String "No route for whatsapp:" logs\service.log | Select-Object -Last 5`
|
|
81
|
+
|
|
82
|
+
### iMessage (macOS only)
|
|
83
|
+
1. Tell them:
|
|
84
|
+
- Install imsg: `brew install phamson02/imsg/imsg`
|
|
85
|
+
- Grant Full Disk Access to Terminal (System Settings → Privacy & Security)
|
|
86
|
+
- Test: `imsg chats --json`
|
|
87
|
+
2. Call `update_channel` with:
|
|
88
|
+
- channelName: "imessage"
|
|
89
|
+
- config: { enabled: true }
|
|
90
|
+
3. Tell them: "Run `imsg chats --json` and paste the chat ID for the conversation you want."
|
|
91
|
+
|
|
92
|
+
## Step 4: Create First Agent
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
Now let's create your agent — this is the AI you'll chat with from your phone.
|
|
96
|
+
|
|
97
|
+
What do you want to call it? (e.g., "My Agent", "Assistant", "Jarvis")
|
|
98
|
+
What @mention should trigger it? (e.g., @agent, @jarvis, @ai)
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Only ask those two questions. Use these defaults (don't ask):
|
|
102
|
+
- persistent: true
|
|
103
|
+
- streaming: true
|
|
104
|
+
- advancedMemory: true
|
|
105
|
+
- autonomousCapable: true
|
|
106
|
+
- workspace: ~ (home directory)
|
|
107
|
+
- tools: all (Read, Edit, Write, Glob, Grep, Bash, WebFetch, WebSearch)
|
|
108
|
+
- description: "General-purpose AI agent accessible from phone and web."
|
|
109
|
+
|
|
110
|
+
Call `create_agent` with all the above.
|
|
111
|
+
|
|
112
|
+
## Step 5: Wire the Route
|
|
113
|
+
|
|
114
|
+
For each channel configured in Step 3, call `add_agent_route` with:
|
|
115
|
+
- channelName: the channel
|
|
116
|
+
- agentId: the new agent's ID
|
|
117
|
+
- chatId: the chat ID discovered in Step 3
|
|
118
|
+
- requireMention: true (for group chats) or false (for DMs)
|
|
119
|
+
|
|
120
|
+
Then call `restart_service` one final time.
|
|
121
|
+
|
|
122
|
+
## Step 6: Test
|
|
123
|
+
|
|
124
|
+
```
|
|
125
|
+
You're all set! Try it now:
|
|
126
|
+
|
|
127
|
+
Send "@alias hello" from your phone.
|
|
128
|
+
|
|
129
|
+
If you get a response — you're live! Your agent is running.
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Wait for them to confirm it works. If it doesn't, troubleshoot:
|
|
133
|
+
- No response → check that the chat ID is correct
|
|
134
|
+
- Wrong agent responds → check requireMention settings
|
|
135
|
+
- Connection error → check the channel token
|
|
136
|
+
|
|
137
|
+
## Step 7: Done
|
|
138
|
+
|
|
139
|
+
```
|
|
140
|
+
Setup complete! Here's what you have:
|
|
141
|
+
|
|
142
|
+
Agent: [name] ([alias])
|
|
143
|
+
Channels: [list of connected channels]
|
|
144
|
+
Web UI: http://localhost:4888
|
|
145
|
+
|
|
146
|
+
Next steps:
|
|
147
|
+
- Visit /org to see your agent and configure it
|
|
148
|
+
- Visit /lab to create more specialized agents
|
|
149
|
+
- Visit /monitor to see your platform status
|
|
150
|
+
- Message @agentcreator in the web UI to create agents through conversation
|
|
151
|
+
|
|
152
|
+
Enjoy your AI team!
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## Important
|
|
156
|
+
|
|
157
|
+
- One step at a time — don't dump all instructions at once
|
|
158
|
+
- If they get stuck, offer to skip and come back later
|
|
159
|
+
- If a channel fails, don't block the whole setup — move to the next step
|
|
160
|
+
- Always call `restart_service` after channel config changes
|
|
161
|
+
- Always validate the agent was created before wiring routes
|
|
162
|
+
- The "No route for {channel}:{chatId}" log pattern is how we discover chat IDs — it's a built-in feature
|