@markus-global/cli 0.9.6 → 0.9.7-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/commands/skill.d.ts +3 -0
- package/dist/commands/skill.d.ts.map +1 -0
- package/dist/commands/skill.js +148 -0
- package/dist/commands/skill.js.map +1 -0
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +17 -1
- package/dist/commands/start.js.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/markus.mjs +5302 -2735
- package/dist/web-ui/assets/{CommentInput-CBNbViJY.js → CommentInput-Dvlq2svZ.js} +1 -1
- package/dist/web-ui/assets/{ContentRenderer-DE3pZgeX.js → ContentRenderer-BfnvpFM7.js} +2 -2
- package/dist/web-ui/assets/DeliverableShareModal-DkGpQmZ8.js +1 -0
- package/dist/web-ui/assets/Deliverables-CtPvquKO.js +3 -0
- package/dist/web-ui/assets/{Notifications-DnOdXHNc.js → Notifications-C_e9_V74.js} +1 -1
- package/dist/web-ui/assets/{Search-BxFLlgcf.js → Search-DZBGpN3c.js} +1 -1
- package/dist/web-ui/assets/Settings-6xm2sHhm.js +8 -0
- package/dist/web-ui/assets/{Store-BELkjEqO.js → Store-dbJSFCFw.js} +1 -1
- package/dist/web-ui/assets/Team-vmqHkmh8.js +81 -0
- package/dist/web-ui/assets/Work-Ds7q6pZg.js +11 -0
- package/dist/web-ui/assets/{arc-CyhYnNcy.js → arc-BLoofCdL.js} +1 -1
- package/dist/web-ui/assets/{architectureDiagram-3BPJPVTR-BYIYNrCP.js → architectureDiagram-3BPJPVTR-BGO4nFRN.js} +1 -1
- package/dist/web-ui/assets/{blockDiagram-GPEHLZMM-Tj8Yz066.js → blockDiagram-GPEHLZMM-Cn1E0037.js} +1 -1
- package/dist/web-ui/assets/{c4Diagram-AAUBKEIU-Ifa4IAJa.js → c4Diagram-AAUBKEIU-DXFAnq3E.js} +1 -1
- package/dist/web-ui/assets/channel-Cw25sYRm.js +1 -0
- package/dist/web-ui/assets/{chunk-2J33WTMH-CNSbz4EK.js → chunk-2J33WTMH-BXCSmrWD.js} +1 -1
- package/dist/web-ui/assets/{chunk-4BX2VUAB-DhNtaIHh.js → chunk-4BX2VUAB-CIWJeena.js} +1 -1
- package/dist/web-ui/assets/{chunk-55IACEB6-WUpOSLP9.js → chunk-55IACEB6-BuQ5-tdz.js} +1 -1
- package/dist/web-ui/assets/{chunk-727SXJPM-BJV_Jz1H.js → chunk-727SXJPM-q9Yx_12l.js} +1 -1
- package/dist/web-ui/assets/{chunk-AQP2D5EJ-BHu_5o0Y.js → chunk-AQP2D5EJ-DqaehwKB.js} +1 -1
- package/dist/web-ui/assets/{chunk-FMBD7UC4-CfxugWTK.js → chunk-FMBD7UC4-BFs2IYjK.js} +1 -1
- package/dist/web-ui/assets/{chunk-ND2GUHAM-hIFBUDLZ.js → chunk-ND2GUHAM-DyYGWpbj.js} +1 -1
- package/dist/web-ui/assets/{chunk-QZHKN3VN-DF0OYrsG.js → chunk-QZHKN3VN-DmbA4AU_.js} +1 -1
- package/dist/web-ui/assets/classDiagram-4FO5ZUOK-CDWjvgnK.js +1 -0
- package/dist/web-ui/assets/classDiagram-v2-Q7XG4LA2-CDWjvgnK.js +1 -0
- package/dist/web-ui/assets/{cose-bilkent-S5V4N54A-C3LM31P0.js → cose-bilkent-S5V4N54A-BLWm27gv.js} +1 -1
- package/dist/web-ui/assets/{dagre-BM42HDAG-C_m79Kes.js → dagre-BM42HDAG-Cb2YgHjF.js} +1 -1
- package/dist/web-ui/assets/{diagram-2AECGRRQ-D8liSSSE.js → diagram-2AECGRRQ-hMyyF4SK.js} +1 -1
- package/dist/web-ui/assets/{diagram-5GNKFQAL-DqtsU-bB.js → diagram-5GNKFQAL-DQvYRI_z.js} +1 -1
- package/dist/web-ui/assets/{diagram-KO2AKTUF-C6zkMDRo.js → diagram-KO2AKTUF-CPOv2Kga.js} +1 -1
- package/dist/web-ui/assets/{diagram-LMA3HP47-Dx2JnYqj.js → diagram-LMA3HP47-DvgOU39M.js} +1 -1
- package/dist/web-ui/assets/{diagram-OG6HWLK6-ZI_lN3Ui.js → diagram-OG6HWLK6-DhLJ9Bog.js} +1 -1
- package/dist/web-ui/assets/{erDiagram-TEJ5UH35-DQ5VepuZ.js → erDiagram-TEJ5UH35-C4MKvJYc.js} +1 -1
- package/dist/web-ui/assets/{flowDiagram-I6XJVG4X-6GiDnWFL.js → flowDiagram-I6XJVG4X-C4KiUPBX.js} +1 -1
- package/dist/web-ui/assets/{ganttDiagram-6RSMTGT7-D6HROKP8.js → ganttDiagram-6RSMTGT7-CFiAe8nx.js} +1 -1
- package/dist/web-ui/assets/{gitGraphDiagram-PVQCEYII-CXm0stFt.js → gitGraphDiagram-PVQCEYII-y6rZo1sT.js} +1 -1
- package/dist/web-ui/assets/index-BbQpGkiM.css +1 -0
- package/dist/web-ui/assets/index-CcppNtga.js +672 -0
- package/dist/web-ui/assets/{infoDiagram-5YYISTIA-C1RxESvu.js → infoDiagram-5YYISTIA-LLlnmiVb.js} +1 -1
- package/dist/web-ui/assets/{ishikawaDiagram-YF4QCWOH-K65PlAf9.js → ishikawaDiagram-YF4QCWOH-Brs-NT84.js} +1 -1
- package/dist/web-ui/assets/{journeyDiagram-JHISSGLW-_Rs_Vudv.js → journeyDiagram-JHISSGLW-um06-20P.js} +1 -1
- package/dist/web-ui/assets/{kanban-definition-UN3LZRKU-Jf6WnoNW.js → kanban-definition-UN3LZRKU-yws0Rgw8.js} +1 -1
- package/dist/web-ui/assets/{mermaid.core-C6jfI8lj.js → mermaid.core-C0Q8mcc_.js} +5 -5
- package/dist/web-ui/assets/{mindmap-definition-RKZ34NQL-CuVR_m6C.js → mindmap-definition-RKZ34NQL-xCtHajk4.js} +1 -1
- package/dist/web-ui/assets/{pieDiagram-4H26LBE5-BiPJBXLU.js → pieDiagram-4H26LBE5-BhKiwY7r.js} +1 -1
- package/dist/web-ui/assets/{quadrantDiagram-W4KKPZXB-C4hoAfNv.js → quadrantDiagram-W4KKPZXB-CGmxw13s.js} +1 -1
- package/dist/web-ui/assets/{requirementDiagram-4Y6WPE33-BmjjjPuK.js → requirementDiagram-4Y6WPE33-CYJRHrZE.js} +1 -1
- package/dist/web-ui/assets/{sankeyDiagram-5OEKKPKP-ts7xFx2o.js → sankeyDiagram-5OEKKPKP-CgkdSCTc.js} +1 -1
- package/dist/web-ui/assets/{sequenceDiagram-3UESZ5HK-C3je_x5z.js → sequenceDiagram-3UESZ5HK-BD2dXCDe.js} +1 -1
- package/dist/web-ui/assets/{stateDiagram-AJRCARHV-CREzVZ-3.js → stateDiagram-AJRCARHV-DdEvCrm2.js} +1 -1
- package/dist/web-ui/assets/stateDiagram-v2-BHNVJYJU-DKPteYMC.js +1 -0
- package/dist/web-ui/assets/{timeline-definition-PNZ67QCA-CriALCTC.js → timeline-definition-PNZ67QCA-CWfdKPN1.js} +1 -1
- package/dist/web-ui/assets/{vennDiagram-CIIHVFJN-Bc9NNe3M.js → vennDiagram-CIIHVFJN-BTiDdRt6.js} +1 -1
- package/dist/web-ui/assets/{wardley-L42UT6IY-psF9We_q.js → wardley-L42UT6IY-eDkltTBC.js} +1 -1
- package/dist/web-ui/assets/{wardleyDiagram-YWT4CUSO-DNZ9Jdgm.js → wardleyDiagram-YWT4CUSO-DLOZOKTX.js} +1 -1
- package/dist/web-ui/assets/{xychartDiagram-2RQKCTM6-COezi66E.js → xychartDiagram-2RQKCTM6-RU8GlPu6.js} +1 -1
- package/dist/web-ui/index.html +2 -2
- package/package.json +2 -2
- package/templates/roles/{SHARED.md → HANDBOOK.md} +17 -7
- package/templates/roles/org-manager/ROLE.md +1 -5
- package/templates/roles/skill-architect/ROLE.md +1 -1
- package/templates/skills/agent-building/SKILL.md +109 -11
- package/templates/skills/skill-building/SKILL.md +61 -0
- package/templates/skills/team-building/SKILL.md +110 -4
- package/dist/web-ui/assets/Deliverables-Cx97uG2f.js +0 -6
- package/dist/web-ui/assets/Settings-D0i8Lnsk.js +0 -8
- package/dist/web-ui/assets/Team-D_C3tvWh.js +0 -80
- package/dist/web-ui/assets/Work-DpRdSwD5.js +0 -11
- package/dist/web-ui/assets/channel-B33xJsNY.js +0 -1
- package/dist/web-ui/assets/classDiagram-4FO5ZUOK-BePK-BYt.js +0 -1
- package/dist/web-ui/assets/classDiagram-v2-Q7XG4LA2-BePK-BYt.js +0 -1
- package/dist/web-ui/assets/index-BMzsi3-i.js +0 -670
- package/dist/web-ui/assets/index-C9gwAZYM.css +0 -1
- package/dist/web-ui/assets/stateDiagram-v2-BHNVJYJU-CZU51KZ-.js +0 -1
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: agent-building
|
|
3
|
-
description: Design and create AI agent packages — manifest format, directory structure, file writing workflow
|
|
3
|
+
description: Design and create AI agent packages — manifest format, directory structure, image asset generation (avatar/thumbnail/screenshots), file writing workflow, comprehensive field reference
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Agent Building
|
|
7
7
|
|
|
8
|
-
This skill teaches you how to create Markus agent packages — self-contained directory-based artifacts that define an AI agent's identity, capabilities, and
|
|
8
|
+
This skill teaches you how to create Markus agent packages — self-contained directory-based artifacts that define an AI agent's identity, capabilities, constraints, and visual assets.
|
|
9
9
|
|
|
10
10
|
## Artifact Directory
|
|
11
11
|
|
|
@@ -18,7 +18,9 @@ This skill teaches you how to create Markus agent packages — self-contained di
|
|
|
18
18
|
├── ROLE.md # Identity and system prompt (REQUIRED)
|
|
19
19
|
├── HEARTBEAT.md # Periodic self-check checklist (RECOMMENDED)
|
|
20
20
|
├── POLICIES.md # Constraints & guardrails (optional)
|
|
21
|
-
|
|
21
|
+
├── CONTEXT.md # Domain context & references (optional)
|
|
22
|
+
└── images/ # Image assets (avatar, screenshots)
|
|
23
|
+
└── avatar.jpg # Agent avatar/thumbnail image
|
|
22
24
|
```
|
|
23
25
|
|
|
24
26
|
**Do NOT write artifacts to `~/.markus/shared/`, your working directory, or any other location.** Only `~/.markus/builder-artifacts/agents/` is recognized by the system.
|
|
@@ -38,8 +40,8 @@ The manifest `name` is the **package slug**: directory name, Hub URL segment (`/
|
|
|
38
40
|
|
|
39
41
|
| User language | `name` (slug) | `displayName` |
|
|
40
42
|
|---|---|---|
|
|
41
|
-
| Chinese
|
|
42
|
-
| English
|
|
43
|
+
| Chinese "论文导师" | `paper-mentor` | `论文导师` |
|
|
44
|
+
| English "Code Reviewer" | `code-reviewer` | `Code Reviewer` |
|
|
43
45
|
|
|
44
46
|
If the user only gives a Chinese title, **you invent an English kebab slug** that captures the meaning, set `displayName` to their title, and use the slug for the directory path `~/.markus/builder-artifacts/agents/{name}/`.
|
|
45
47
|
|
|
@@ -71,6 +73,11 @@ This JSON contains ONLY metadata — **no file content**.
|
|
|
71
73
|
"author": "",
|
|
72
74
|
"category": "development | devops | management | productivity | general",
|
|
73
75
|
"tags": ["tag1", "tag2"],
|
|
76
|
+
"icon": "images/avatar.jpg",
|
|
77
|
+
"thumbnail": "images/avatar.jpg",
|
|
78
|
+
"screenshots": ["images/avatar.jpg"],
|
|
79
|
+
"license": "MIT",
|
|
80
|
+
"originalSource": "https://github.com/...",
|
|
74
81
|
"dependencies": {
|
|
75
82
|
"skills": ["skill-id-1", "skill-id-2"],
|
|
76
83
|
"env": ["git", "node"]
|
|
@@ -121,6 +128,8 @@ After the JSON is saved, write each file individually using `file_write`. The ba
|
|
|
121
128
|
|
|
122
129
|
5. **CONTEXT.md** (optional) — Additional domain context, references, or knowledge.
|
|
123
130
|
|
|
131
|
+
6. **images/avatar.jpg** — Agent visual assets (see [Image Assets](#image-assets) section below).
|
|
132
|
+
|
|
124
133
|
**Example file_write calls:**
|
|
125
134
|
|
|
126
135
|
```
|
|
@@ -130,6 +139,86 @@ file_write("~/.markus/builder-artifacts/agents/code-reviewer/HEARTBEAT.md", "# H
|
|
|
130
139
|
file_write("~/.markus/builder-artifacts/agents/code-reviewer/POLICIES.md", "# Policies\n\n- Only use shell_execute for read-only commands...\n- Always show file contents before overwriting...")
|
|
131
140
|
```
|
|
132
141
|
|
|
142
|
+
## Image Assets
|
|
143
|
+
|
|
144
|
+
Agent avatars are **digital employee portraits** — they should depict a person (realistic human style), not abstract icons, logos, or illustrations. Users should recognize the agent as a team member, not a mascot.
|
|
145
|
+
|
|
146
|
+
### Image Generation
|
|
147
|
+
|
|
148
|
+
Use the `generate_image` tool to create agent portraits. Prompt style guide:
|
|
149
|
+
|
|
150
|
+
```
|
|
151
|
+
Good prompt (do this):
|
|
152
|
+
"Professional headshot of a friendly male product manager in a business casual attire,
|
|
153
|
+
warm blue tones, clean background, digital art style, realistic portrait"
|
|
154
|
+
"Creative female content writer with glasses, warm orange tones, looking thoughtful,
|
|
155
|
+
holding a notebook, realistic digital portrait, professional yet approachable"
|
|
156
|
+
|
|
157
|
+
Bad prompt (don't do this):
|
|
158
|
+
"Abstract icon of a roadmap with sticky notes" ✗ — user said "不知所云"
|
|
159
|
+
"A laptop with writing bubbles floating above it" ✗ — not a person
|
|
160
|
+
"Logo design for a content creator" ✗ — not a digital employee
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
Key prompt rules:
|
|
164
|
+
- **Subject is always a person** — realistic digital portrait
|
|
165
|
+
- **Match the role's personality** — PM = organized/strategic, Creator = creative/warm
|
|
166
|
+
- **Use color palette** that aligns with the role (blue for analytical, orange for creative, green for growth)
|
|
167
|
+
- **Background**: clean, professional, non-distracting
|
|
168
|
+
- **Style**: `"realistic digital portrait", "professional headshot", "digital art style"`
|
|
169
|
+
|
|
170
|
+
### Image Size & Compression
|
|
171
|
+
|
|
172
|
+
The `generate_image` tool typically outputs large images (e.g., 2048x2048, 400KB+). **Always compress before saving to the artifact directory.**
|
|
173
|
+
|
|
174
|
+
Recommended specifications:
|
|
175
|
+
|
|
176
|
+
| Property | Value |
|
|
177
|
+
|:---------|:------|
|
|
178
|
+
| **Final resolution** | 512×512 (square) |
|
|
179
|
+
| **File format** | JPEG |
|
|
180
|
+
| **Max file size** | ≤50KB |
|
|
181
|
+
| **Compression method** | Python Pillow (`pip3 install Pillow`) resize + save |
|
|
182
|
+
|
|
183
|
+
Compression procedure:
|
|
184
|
+
```python
|
|
185
|
+
# Using Python Pillow
|
|
186
|
+
python3 -c "
|
|
187
|
+
from PIL import Image
|
|
188
|
+
img = Image.open('source.jpg')
|
|
189
|
+
img = img.resize((512, 512), Image.LANCZOS)
|
|
190
|
+
img.save('avatar.jpg', 'JPEG', quality=85)
|
|
191
|
+
"
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
Typical result: 2048×2048 (426KB) → 512×512 (19KB), saving ~96%.
|
|
195
|
+
|
|
196
|
+
### File Placement
|
|
197
|
+
|
|
198
|
+
| File | Directory | Purpose |
|
|
199
|
+
|:----|:----------|:--------|
|
|
200
|
+
| `avatar.jpg` | `images/` | Agent avatar, used for both `icon` and `thumbnail` |
|
|
201
|
+
| Additional screenshots | `images/` | Optional, for feature showcase |
|
|
202
|
+
|
|
203
|
+
**Always** place images under an `images/` subdirectory — NOT at the artifact root. This follows the existing convention used by `paper-mentor`, `prompt-engineer`, and other agents.
|
|
204
|
+
|
|
205
|
+
### Local Path vs Hub CDN URL
|
|
206
|
+
|
|
207
|
+
This is a critical distinction:
|
|
208
|
+
|
|
209
|
+
| Phase | Field | Value | Where |
|
|
210
|
+
|:------|:------|:------|:------|
|
|
211
|
+
| **Local artifact (builder-artifacts/)** | `icon` | `"images/avatar.jpg"` | Relative path in agent.json |
|
|
212
|
+
| **Local artifact (builder-artifacts/)** | `thumbnail` | `"images/avatar.jpg"` | Relative path in agent.json |
|
|
213
|
+
| **Local artifact (builder-artifacts/)** | `screenshots` | `["images/avatar.jpg"]` | Relative paths in agent.json |
|
|
214
|
+
| **Published to Hub** | `icon` | Emoji or CDN URL | Hub DB field (`hub_items.icon`) |
|
|
215
|
+
| **Published to Hub** | `thumbnailUrl` | `"https://hub.markus.global/uploads/img_xxx.jpg"` | Hub DB field (`hub_items.thumbnail_url`) |
|
|
216
|
+
| **Published to Hub** | `images` | `[{"url":"...","alt":"...","order":0}]` | Hub DB field (`hub_items.images`) |
|
|
217
|
+
|
|
218
|
+
**Note:** Hub DB schema uses `thumbnailUrl` (not `thumbnail`), and `images` (not `screenshots`). The local artifact file uses `thumbnail` and `screenshots` for compatibility with the local install system. When publishing to Hub via API, map:
|
|
219
|
+
- Local `thumbnail` → Hub `thumbnailUrl`
|
|
220
|
+
- Local `screenshots` → Hub `images` (converted to `{url, alt, order}[]` format)
|
|
221
|
+
|
|
133
222
|
## Field Reference
|
|
134
223
|
|
|
135
224
|
### Top-level fields
|
|
@@ -138,14 +227,19 @@ file_write("~/.markus/builder-artifacts/agents/code-reviewer/POLICIES.md", "# Po
|
|
|
138
227
|
- **`displayName`**: Human-readable name, can be in any language (e.g., `"论文学习导师"`, `"Code Reviewer"`)
|
|
139
228
|
- **`version`**: Semver (default `"1.0.0"`)
|
|
140
229
|
- **`description`**: What this agent does (can be in any language)
|
|
141
|
-
- **`category`**: One of `development`, `devops`, `management`, `productivity`, `general`
|
|
230
|
+
- **`category`**: One of `development`, `devops`, `management`, `productivity`, `general`, `marketing`, `engineering`, `product-management`
|
|
142
231
|
- **`tags`**: Array of descriptive tags
|
|
232
|
+
- **`icon`** (optional): Can be emoji OR image path. Emoji is lighter (zero network cost). Image path is visually richer. Both work in the Hub UI. Example: `"🚀"` or `"images/avatar.jpg"`
|
|
233
|
+
- **`thumbnail`** (optional): Relative path to avatar image in artifact. Shows as large preview. Must be under `images/` directory. Example: `"images/avatar.jpg"`
|
|
234
|
+
- **`screenshots`** (optional): Array of image paths for gallery/展示. Each path under `images/`. Example: `["images/avatar.jpg"]`
|
|
235
|
+
- **`license`** (optional): License type, e.g. MIT, Apache-2.0. Example: `"MIT"`
|
|
236
|
+
- **`originalSource`** (optional): URL to original source repository for attribution. Example: `"https://github.com/..."`
|
|
143
237
|
- **`dependencies.skills`**: Skill IDs from the dynamic context. **Actively assign — don't leave empty!**
|
|
144
238
|
- **`dependencies.env`**: Required CLI tools (e.g., `["git", "node"]`). Omit if none needed.
|
|
145
239
|
|
|
146
240
|
### `agent` section (REQUIRED)
|
|
147
241
|
- **`agentRole`**: `"worker"` (executes tasks) or `"manager"` (coordinates, assigns, reviews)
|
|
148
|
-
- **`llmProvider`**, **`llmModel`**, **`temperature`**: LLM configuration. Leave empty for system defaults.
|
|
242
|
+
- **`llmProvider`**, **`llmModel`**, **`temperature`**: LLM configuration. Leave empty for system defaults. Temperature: 0.7 general, 0.3-0.5 precision, 0.8-1.0 creative.
|
|
149
243
|
|
|
150
244
|
**Note**: The `roleName` field is **not needed**. The agent's identity is fully defined by its `ROLE.md` file. Do NOT include `roleName` unless you specifically want to inherit default tools from a built-in role template (rare).
|
|
151
245
|
|
|
@@ -164,9 +258,10 @@ If an agent needs to be cautious with certain tools, write that into `POLICIES.m
|
|
|
164
258
|
|
|
165
259
|
Once all files are written, tell the user:
|
|
166
260
|
|
|
167
|
-
1. **The agent has been created and saved** — summarize what was created (name, purpose, key skills).
|
|
168
|
-
2. **
|
|
169
|
-
3. **
|
|
261
|
+
1. **The agent has been created and saved** — summarize what was created (name, purpose, key skills, image asset).
|
|
262
|
+
2. **Visual asset included** — note the avatar image and its compressed size.
|
|
263
|
+
3. **Ready to install** — the user can install from the Builder page, or ask you to install it (you would use `package_install`). Do NOT install unless asked.
|
|
264
|
+
4. **To modify or improve** this agent (e.g., update the role, change skills, adjust policies, regenerate the avatar), just continue the conversation here — describe what you want to change and I'll update the files directly.
|
|
170
265
|
|
|
171
266
|
## Rules
|
|
172
267
|
|
|
@@ -176,6 +271,9 @@ Once all files are written, tell the user:
|
|
|
176
271
|
- **DO NOT** write artifacts to `~/.markus/shared/` or your working directory. Always use `~/.markus/builder-artifacts/agents/{name}/`.
|
|
177
272
|
- **The `name` field MUST be a valid English kebab-case slug** (see Package Slug). Never use Chinese as `name`. Invalid `name` → write/save/share fails.
|
|
178
273
|
- **All top-level fields must be the correct type**: `author` must be a plain string (e.g. `"John"`) — NOT an object. `tags` must be an array of strings. `version` must be semver string. `description` must be a string. The system validates the manifest on write and will reject malformed files.
|
|
274
|
+
- **Agent avatars MUST be human/digital employee portraits** — not abstract icons or logos. Users should see a person.
|
|
275
|
+
- **Always compress images** — from raw generation output (often ~400KB+) to ≤50KB (512×512 JPEG).
|
|
276
|
+
- **Images go in `images/` subdirectory** — never at the artifact root.
|
|
179
277
|
- The `ROLE.md` is what makes the agent unique — write at least 5 substantive paragraphs. A generic one-liner is useless.
|
|
180
278
|
- Default `temperature` to 0.7 for general tasks, lower (0.3-0.5) for precision tasks, higher (0.8-1.0) for creative tasks.
|
|
181
|
-
- After outputting the JSON, immediately proceed to write files via `file_write` — announce what you're writing.
|
|
279
|
+
- After outputting the JSON, immediately proceed to write files via `file_write` — announce what you're writing.
|
|
@@ -21,6 +21,8 @@ Most skills are instruction-based. Use MCP-based skills when the capability requ
|
|
|
21
21
|
├── skill.json # Manifest (auto-created from your JSON output)
|
|
22
22
|
├── SKILL.md # Instruction document (you write via file_write)
|
|
23
23
|
├── README.md # Human-readable documentation (optional)
|
|
24
|
+
├── images/ # Skill icon images (optional)
|
|
25
|
+
│ └── icon.png # Skill icon — used in UI after install
|
|
24
26
|
└── ... # Any other files: scripts, MCP servers, configs, templates, etc.
|
|
25
27
|
```
|
|
26
28
|
|
|
@@ -60,6 +62,7 @@ This JSON contains ONLY metadata — **no file content**.
|
|
|
60
62
|
"version": "1.0.0",
|
|
61
63
|
"description": "When and why an agent should use this skill",
|
|
62
64
|
"author": "Your Name",
|
|
65
|
+
"icon": "images/icon.png",
|
|
63
66
|
"category": "custom",
|
|
64
67
|
"tags": ["tag1", "tag2"],
|
|
65
68
|
"skill": {
|
|
@@ -77,6 +80,7 @@ This JSON contains ONLY metadata — **no file content**.
|
|
|
77
80
|
"version": "1.0.0",
|
|
78
81
|
"description": "Connect to My API for data retrieval and actions",
|
|
79
82
|
"author": "Your Name",
|
|
83
|
+
"icon": "images/icon.png",
|
|
80
84
|
"category": "custom",
|
|
81
85
|
"tags": ["api", "connector"],
|
|
82
86
|
"skill": {
|
|
@@ -120,6 +124,63 @@ After the JSON is saved, write each file individually using `file_write`. The ba
|
|
|
120
124
|
|
|
121
125
|
4. **Any other files** — Helper scripts, templates, config files, data files, etc.
|
|
122
126
|
|
|
127
|
+
5. **images/icon.png** (optional) — Skill icon for UI display (see [Image Assets](#image-assets)).
|
|
128
|
+
|
|
129
|
+
## Image Assets
|
|
130
|
+
|
|
131
|
+
Skill icons are **abstract representations** of the skill's capability — like an app icon or tool symbol. They should be clean, recognizable, and work well at small sizes.
|
|
132
|
+
|
|
133
|
+
| Image | Location | Style | Purpose |
|
|
134
|
+
|:------|:---------|:------|:--------|
|
|
135
|
+
| **Skill icon** | `images/icon.png` | Abstract icon / symbol | Skill card in UI, published to Hub as `icon` |
|
|
136
|
+
|
|
137
|
+
**Do NOT use portraits for skill icons.** Skills are tools, not team members. Portraits belong on agents.
|
|
138
|
+
|
|
139
|
+
### Image Generation
|
|
140
|
+
|
|
141
|
+
Prompt style guide for `generate_image`:
|
|
142
|
+
```
|
|
143
|
+
Good prompt (do this):
|
|
144
|
+
"Clean icon design for a git changelog tool, stylized git branch merging into a document,
|
|
145
|
+
flat vector style, teal and white palette, square format, modern minimal"
|
|
146
|
+
"Minimalist icon for a GitHub automation skill, octagon cat silhouette combined with
|
|
147
|
+
gear, flat design, purple gradients, square format"
|
|
148
|
+
"Abstract icon representing web scraping capability, spider-web pattern with a magnifying
|
|
149
|
+
glass, geometric style, blue and orange accents, square format"
|
|
150
|
+
|
|
151
|
+
Bad prompt (don't do this):
|
|
152
|
+
"Developer sitting at a computer" ✗ — portraits are for agents, not skills
|
|
153
|
+
"Abstract colorful splash without meaning" ✗ — too vague, no clear concept
|
|
154
|
+
"Screenshot of a terminal window" ✗ — not an icon
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
Key rules:
|
|
158
|
+
- **Style**: flat vector / geometric / minimal — NOT photographic, NOT portraits
|
|
159
|
+
- **Subject**: abstract concept representing the skill's capability
|
|
160
|
+
- **Format**: square, clean background, recognizable at small sizes (64×64)
|
|
161
|
+
- **Match skill function**: git → branching, browser → window/globe, API → connector/plug
|
|
162
|
+
|
|
163
|
+
### Image Size & Compression
|
|
164
|
+
|
|
165
|
+
| Property | Value |
|
|
166
|
+
|:---------|:------|
|
|
167
|
+
| **Final resolution** | 512×512 (square) |
|
|
168
|
+
| **File format** | PNG (recommended for icons — crisp lines, transparency) |
|
|
169
|
+
| **Max file size** | ≤30KB |
|
|
170
|
+
| **Compression method** | Python Pillow (`pip3 install Pillow`) resize + save |
|
|
171
|
+
|
|
172
|
+
Compression procedure:
|
|
173
|
+
```python
|
|
174
|
+
python3 -c "
|
|
175
|
+
from PIL import Image
|
|
176
|
+
img = Image.open('source.png')
|
|
177
|
+
img = img.resize((512, 512), Image.LANCZOS)
|
|
178
|
+
img.save('icon.png', 'PNG', optimize=True)
|
|
179
|
+
"
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
**Always** place images under an `images/` subdirectory — NOT at the artifact root.
|
|
183
|
+
|
|
123
184
|
**Example file_write calls:**
|
|
124
185
|
|
|
125
186
|
```
|
|
@@ -21,6 +21,8 @@ This skill teaches you how to create Markus team packages — self-contained dir
|
|
|
21
21
|
├── README.md # Public-facing team overview for Hub/Builder (REQUIRED)
|
|
22
22
|
├── ANNOUNCEMENT.md # Team announcement (you write via file_write)
|
|
23
23
|
├── NORMS.md # Working norms (you write via file_write)
|
|
24
|
+
├── images/ # Team-level images (icon, etc.)
|
|
25
|
+
│ └── icon.png # Team icon — used as avatar after install
|
|
24
26
|
├── workflows/ # Workflow templates (optional)
|
|
25
27
|
│ └── {workflow-name}.yaml # YAML workflow DAG definition
|
|
26
28
|
└── members/
|
|
@@ -28,12 +30,14 @@ This skill teaches you how to create Markus team packages — self-contained dir
|
|
|
28
30
|
│ ├── ROLE.md # Identity and system prompt (REQUIRED)
|
|
29
31
|
│ ├── HEARTBEAT.md # Periodic self-check checklist (RECOMMENDED)
|
|
30
32
|
│ ├── POLICIES.md # Constraints and guardrails (optional)
|
|
31
|
-
│
|
|
33
|
+
│ ├── CONTEXT.md # Domain context and references (optional)
|
|
34
|
+
│ └── images/ # Member avatar images (e.g. avatar.jpg)
|
|
32
35
|
└── {worker-slug}/
|
|
33
36
|
├── ROLE.md # Identity and system prompt (REQUIRED)
|
|
34
37
|
├── HEARTBEAT.md # Periodic self-check checklist (RECOMMENDED)
|
|
35
38
|
├── POLICIES.md # Constraints and guardrails (optional)
|
|
36
|
-
|
|
39
|
+
├── CONTEXT.md # Domain context and references (optional)
|
|
40
|
+
└── images/ # Member avatar images (e.g. avatar.jpg)
|
|
37
41
|
```
|
|
38
42
|
|
|
39
43
|
**Do NOT write artifacts to `~/.markus/shared/`, your agent `workspace/`, or any other location.** Only `~/.markus/builder-artifacts/teams/` is recognized by `package_list` / `package_install`. The `agents/`, `teams/`, and `skills/` subdirs are created automatically at startup — still write files yourself with `file_write`.
|
|
@@ -66,6 +70,7 @@ If the user only gives a Chinese title, **you invent an English kebab slug** tha
|
|
|
66
70
|
| `members/{name}/HEARTBEAT.md` | `~/.markus/agents/{agentId}/role/HEARTBEAT.md` | Periodic self-check checklist (every ~30 min) |
|
|
67
71
|
| `members/{name}/POLICIES.md` | `~/.markus/agents/{agentId}/role/POLICIES.md` | Additional agent constraints |
|
|
68
72
|
| `members/{name}/CONTEXT.md` | `~/.markus/agents/{agentId}/role/CONTEXT.md` | Domain context and references |
|
|
73
|
+
| `members/{name}/images/` | `~/.markus/agents/{agentId}/role/images/` | Member avatar images (copied on install; first image used as agent avatar) |
|
|
69
74
|
| `workflows/*.yaml` | `~/.markus/teams/{teamId}/workflows/*.yaml` | Workflow templates (runnable as task DAGs) |
|
|
70
75
|
|
|
71
76
|
## Creation Workflow
|
|
@@ -94,6 +99,7 @@ This JSON contains ONLY metadata and structure — **no file content**.
|
|
|
94
99
|
"version": "1.0.0",
|
|
95
100
|
"description": "Team purpose and goals",
|
|
96
101
|
"author": "",
|
|
102
|
+
"icon": "images/icon.png",
|
|
97
103
|
"category": "development | devops | management | productivity | general",
|
|
98
104
|
"tags": ["tag1", "tag2"],
|
|
99
105
|
"team": {
|
|
@@ -122,6 +128,13 @@ This JSON contains ONLY metadata and structure — **no file content**.
|
|
|
122
128
|
}
|
|
123
129
|
```
|
|
124
130
|
|
|
131
|
+
> ⚠️ **CRITICAL — manifest field rules:**
|
|
132
|
+
> - `members` MUST be nested under `team`, NOT at the root level.
|
|
133
|
+
> - `role` MUST be exactly `"manager"` or `"worker"` — no descriptions, no other values. The UI uses this to color-code tabs and determine sidebar counts.
|
|
134
|
+
> - `count` is REQUIRED for every member (typically `1`).
|
|
135
|
+
> - `category` MUST be one of: `development`, `devops`, `management`, `productivity`, `general`.
|
|
136
|
+
> - The root level should NOT contain `members` or `skills` directly — put `skills` under `dependencies.skills`.
|
|
137
|
+
|
|
125
138
|
After `team.json` is written, proceed to write the remaining files with `file_write`.
|
|
126
139
|
|
|
127
140
|
### Step 2: Write Files with file_write
|
|
@@ -166,6 +179,97 @@ After the JSON is saved, write each file individually using `file_write`. The ba
|
|
|
166
179
|
|
|
167
180
|
7. **CONTEXT.md** (optional) — Additional domain context, references, or knowledge specific to a member.
|
|
168
181
|
|
|
182
|
+
## Image Assets
|
|
183
|
+
|
|
184
|
+
Teams use **two kinds of images**, stored in separate locations:
|
|
185
|
+
|
|
186
|
+
| Image | Location | Style | Purpose |
|
|
187
|
+
|:------|:---------|:------|:--------|
|
|
188
|
+
| **Team icon** | `images/icon.png` | Abstract logo / icon | Team card in UI, published to Hub as `icon` |
|
|
189
|
+
| **Member avatar** | `members/{slug}/images/avatar.jpg` | Realistic digital portrait | Agent card in UI (same as agent-building) |
|
|
190
|
+
|
|
191
|
+
### Team Icon
|
|
192
|
+
|
|
193
|
+
A team icon should represent the team's **identity as a whole** — like a department logo or squad badge. Use abstract, geometric, or emblematic styles. **Do NOT use portraits for the team icon** (portraits belong on individual member agents).
|
|
194
|
+
|
|
195
|
+
Prompt style guide for `generate_image`:
|
|
196
|
+
```
|
|
197
|
+
Good prompt (do this):
|
|
198
|
+
"Clean vector-style icon for a research team, geometric shapes forming a magnifying glass
|
|
199
|
+
over interconnected nodes, modern flat design, blue and indigo palette, square format"
|
|
200
|
+
"Minimalist tech squad badge, circuit board pattern forming a shield, clean lines,
|
|
201
|
+
dark blue and cyan accents, flat vector illustration, square format"
|
|
202
|
+
|
|
203
|
+
Bad prompt (don't do this):
|
|
204
|
+
"A group of people sitting around a conference table" ✗ — this is a scene, not an icon
|
|
205
|
+
"Smiling project manager portrait" ✗ — portraits are for members, not the team
|
|
206
|
+
"Abstract colorful blob" ✗ — too vague, no recognizable meaning
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
Key rules:
|
|
210
|
+
- **Style**: vector / flat design / geometric / emblematic — NOT photographic
|
|
211
|
+
- **Subject**: abstract concept (shield, gear, nodes, stars, etc.) — NOT people
|
|
212
|
+
- **Format**: square, clean background, recognizable at small sizes (64×64)
|
|
213
|
+
- **Match team purpose**: research → magnifying glass / beaker, dev → code brackets / gear, ops → shield / cog
|
|
214
|
+
|
|
215
|
+
### Member Avatars
|
|
216
|
+
|
|
217
|
+
Member avatars follow the **same rules as agent-building** — they are **digital employee portraits**. Each member gets a realistic headshot that matches their role.
|
|
218
|
+
|
|
219
|
+
Prompt style guide:
|
|
220
|
+
```
|
|
221
|
+
Good prompt (do this):
|
|
222
|
+
"Professional headshot of a friendly male research director in business casual attire,
|
|
223
|
+
warm blue tones, clean background, realistic digital portrait"
|
|
224
|
+
"Creative female content strategist with glasses, warm orange tones, looking thoughtful,
|
|
225
|
+
realistic digital portrait, professional yet approachable"
|
|
226
|
+
|
|
227
|
+
Bad prompt (don't do this):
|
|
228
|
+
"Abstract icon of a roadmap with sticky notes" ✗ — not a person
|
|
229
|
+
"A laptop with writing bubbles floating above it" ✗ — not a person
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
Key rules (same as agent-building):
|
|
233
|
+
- **Subject is always a person** — realistic digital portrait
|
|
234
|
+
- **Match the role's personality** — manager = organized/strategic, creator = creative/warm
|
|
235
|
+
- **Color palette** aligns with the role (blue = analytical, orange = creative, green = growth)
|
|
236
|
+
- **Background**: clean, professional, non-distracting
|
|
237
|
+
- **Style**: `"realistic digital portrait", "professional headshot", "digital art style"`
|
|
238
|
+
|
|
239
|
+
### Image Size & Compression
|
|
240
|
+
|
|
241
|
+
Same specs as agent-building:
|
|
242
|
+
|
|
243
|
+
| Property | Value |
|
|
244
|
+
|:---------|:------|
|
|
245
|
+
| **Final resolution** | 512×512 (square) |
|
|
246
|
+
| **File format** | JPEG (members) / PNG (team icon — for transparency) |
|
|
247
|
+
| **Max file size** | ≤50KB |
|
|
248
|
+
| **Compression method** | Python Pillow (`pip3 install Pillow`) resize + save |
|
|
249
|
+
|
|
250
|
+
Compression procedure:
|
|
251
|
+
```python
|
|
252
|
+
# Using Python Pillow
|
|
253
|
+
python3 -c "
|
|
254
|
+
from PIL import Image
|
|
255
|
+
img = Image.open('source.jpg')
|
|
256
|
+
img = img.resize((512, 512), Image.LANCZOS)
|
|
257
|
+
img.save('avatar.jpg', 'JPEG', quality=85)
|
|
258
|
+
"
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
For team icons (PNG):
|
|
262
|
+
```python
|
|
263
|
+
python3 -c "
|
|
264
|
+
from PIL import Image
|
|
265
|
+
img = Image.open('source.png')
|
|
266
|
+
img = img.resize((512, 512), Image.LANCZOS)
|
|
267
|
+
img.save('icon.png', 'PNG', optimize=True)
|
|
268
|
+
"
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
**Always** place images under an `images/` subdirectory — NOT at the artifact root.
|
|
272
|
+
|
|
169
273
|
**Example file_write calls:**
|
|
170
274
|
|
|
171
275
|
```
|
|
@@ -251,12 +355,14 @@ For the full YAML format reference, DAG patterns, scheduling, and more examples,
|
|
|
251
355
|
- **`tags`**: Descriptive tags
|
|
252
356
|
|
|
253
357
|
### `team.members[]` — Member Specifications (REQUIRED)
|
|
254
|
-
- **`name`**: Display name
|
|
358
|
+
- **`name`**: Display name — Chinese / any language is fine (e.g., "Agent 创建者")
|
|
359
|
+
- **`slug`** *(recommended)*: Explicit kebab-case slug matching the `members/{slug}/` directory name (e.g., `"agent-creator"`). **CRITICAL when `name` contains non-ASCII characters** — the auto-derived slug from `kebab(name)` strips Chinese/Unicode, causing directory mismatch and broken avatars.
|
|
360
|
+
- **`roleName`** *(recommended)*: English version of the display name (e.g., `"Agent Creator"`). Used as a fallback for directory matching when `slug` is not set. `kebab("Agent Creator")` → `"agent-creator"` matches the directory correctly.
|
|
255
361
|
- **`role`**: `"manager"` or `"worker"`
|
|
256
362
|
- **`count`**: Number of instances (default 1)
|
|
257
363
|
- **`skills`**: Skill IDs from the dynamic context. **Actively assign skills — don't leave empty!**
|
|
258
364
|
|
|
259
|
-
**
|
|
365
|
+
> ⚠️ **CRITICAL — Avatar Mapping**: The UI maps each manifest member to its on-disk `members/{slug}/` directory using slug matching. If the member name is in Chinese (e.g., "Agent 创建者"), `kebab()` strips all Unicode → produces `"agent"` which does NOT match `"agent-creator"`. **Always set `slug` (preferred) or `roleName` (fallback)** for members whose display names contain non-ASCII characters. Without this, member avatars, file tabs, and role colors will be mapped to the wrong members or not shown at all.
|
|
260
366
|
|
|
261
367
|
### `team.workflow` — Workflow Configuration (recommended)
|
|
262
368
|
- **`phases`**: Array of phase names defining the team's workflow (e.g., `["plan", "implement", "review", "validate"]`)
|