@markus-global/cli 0.4.20 → 0.4.22
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/dist/commands/start.js +2 -0
- package/dist/commands/start.js.map +1 -1
- package/dist/markus.mjs +1657 -1053
- package/dist/web-ui/assets/index-DEkXd9d7.css +1 -0
- package/dist/web-ui/assets/index-HAWGXtTM.js +66 -0
- package/dist/web-ui/index.html +2 -2
- package/package.json +1 -1
- package/templates/roles/SHARED.md +7 -6
- package/templates/roles/org-manager/HEARTBEAT.md +1 -1
- package/templates/roles/secretary/HEARTBEAT.md +1 -1
- package/templates/skills/agent-building/SKILL.md +5 -5
- package/templates/skills/markitdown/SKILL.md +56 -0
- package/templates/skills/markitdown/skill.json +20 -0
- package/templates/skills/self-evolution/SKILL.md +43 -7
- package/templates/skills/team-building/SKILL.md +4 -5
- package/dist/web-ui/assets/index-Bm8JwOPl.js +0 -66
- package/dist/web-ui/assets/index-CRfXZ2wF.css +0 -1
package/dist/web-ui/index.html
CHANGED
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
<script>
|
|
12
12
|
(function(){var t=localStorage.getItem('markus-theme');if(t&&t!=='system')document.documentElement.classList.add(t)})();
|
|
13
13
|
</script>
|
|
14
|
-
<script type="module" crossorigin src="/assets/index-
|
|
15
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
14
|
+
<script type="module" crossorigin src="/assets/index-HAWGXtTM.js"></script>
|
|
15
|
+
<link rel="stylesheet" crossorigin href="/assets/index-DEkXd9d7.css">
|
|
16
16
|
</head>
|
|
17
17
|
<body>
|
|
18
18
|
<div id="root"></div>
|
package/package.json
CHANGED
|
@@ -299,20 +299,21 @@ Your team maintains two tiers of persistent information:
|
|
|
299
299
|
- This is YOUR private workspace — other agents cannot see it
|
|
300
300
|
|
|
301
301
|
### Shared Deliverables
|
|
302
|
-
-
|
|
302
|
+
- **Workflow**: Write the actual content to a file FIRST (using `shell_execute` or file tools), then call `deliverable_create` to register it — the `summary` field is a brief description, NOT the full content
|
|
303
303
|
- Use `deliverable_search` to find existing team outputs before starting work
|
|
304
304
|
- Use `deliverable_list` to browse what's available by project, type, or agent
|
|
305
|
-
- Use `deliverable_update` to
|
|
305
|
+
- Use `deliverable_update` to update metadata (title, summary, status, tags) — to change the actual content, modify the file directly first
|
|
306
|
+
- If the same `reference` path already exists, `deliverable_create` will update the existing record instead of creating a duplicate
|
|
306
307
|
|
|
307
|
-
### When to
|
|
308
|
-
- After completing a task,
|
|
308
|
+
### When to Register Deliverables
|
|
309
|
+
- After completing a task, register your output files so teammates can discover them
|
|
309
310
|
- Document architectural decisions, coding patterns, API details, dependency quirks
|
|
310
311
|
- Share troubleshooting steps, gotchas, and best practices
|
|
311
|
-
-
|
|
312
|
+
- Register reports summarizing research or analysis findings
|
|
312
313
|
|
|
313
314
|
### Quality Guidelines
|
|
314
315
|
- Write clear, searchable titles
|
|
315
|
-
-
|
|
316
|
+
- Summary should explain what the deliverable is and why it matters (1-3 paragraphs)
|
|
316
317
|
- Tag deliverables for discoverability
|
|
317
318
|
- Flag outdated entries when you find stale information
|
|
318
319
|
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
- **Review duty (PRIORITY)**: Use `task_list` to find tasks in `review` status where you are the designated reviewer. For each one, use `task_get` to inspect deliverables, then either approve (`task_update` with status `completed` and a review note) or reject (`task_update` with status `in_progress` and a note explaining what must change — this sends the task back for revision with a new execution round). Do NOT delay — unreviewed tasks block your team.
|
|
8
8
|
- Check for tasks in `pending` — approve or reject promptly so work is not stalled.
|
|
9
9
|
- **Failed task recovery**: Check `task_list` for tasks assigned to you with status `failed`. If found, retry by calling `task_update(status: "in_progress")` with a note — this auto-restarts execution.
|
|
10
|
-
- **Daily report (after 20:00 only)**: The system will tell you if a report is due. If the "Daily Report Required" section appears in the prompt,
|
|
10
|
+
- **Daily report (after 20:00 only)**: The system will tell you if a report is due. If the "Daily Report Required" section appears in the prompt, write the report content to a file first (using `shell_execute`), then register it via `deliverable_create` with a brief summary. The report must be concise (<500 words), timestamped, and cover: your work, team progress, blockers, and tomorrow's priorities. Do NOT create the report before 20:00.
|
|
11
11
|
- **Completed task review**: Check `task_list` for tasks recently completed by your team. For each:
|
|
12
12
|
- What went well? (first-pass approvals, smooth coordination, clean delegation)
|
|
13
13
|
- What management patterns worked? (task decomposition, reviewer assignment, workload balancing)
|
|
@@ -63,6 +63,6 @@ Skip if nothing meaningful happened.
|
|
|
63
63
|
|
|
64
64
|
## Daily Report (after 20:00 only)
|
|
65
65
|
|
|
66
|
-
The system will tell you if a report is due. If the "Daily Report Required" section appears in the prompt,
|
|
66
|
+
The system will tell you if a report is due. If the "Daily Report Required" section appears in the prompt, write the report content to a file first (using `shell_execute`), then register it via `deliverable_create` with a brief summary. The report must be concise (<500 words), timestamped, and cover: your work, team progress, blockers, and tomorrow's priorities. Do NOT create the report before 20:00.
|
|
67
67
|
|
|
68
68
|
- If nothing changed since last summary, respond HEARTBEAT_OK.
|
|
@@ -21,7 +21,7 @@ This skill teaches you how to create Markus agent packages — self-contained di
|
|
|
21
21
|
|
|
22
22
|
**Do NOT write artifacts to `~/.markus/shared/`, your working directory, or any other location.** Only `~/.markus/builder-artifacts/agents/` is recognized by the system.
|
|
23
23
|
|
|
24
|
-
When the user **installs** the artifact, files are deployed to `~/.markus/agents/{agentId}/role/`. The `ROLE.md`
|
|
24
|
+
When the user **installs** the artifact, files are deployed to `~/.markus/agents/{agentId}/role/`. The `ROLE.md` becomes the agent's system prompt — it IS the agent's identity, not an override of a template.
|
|
25
25
|
|
|
26
26
|
## Two-Step Workflow
|
|
27
27
|
|
|
@@ -55,7 +55,6 @@ This JSON contains ONLY metadata — **no file content**.
|
|
|
55
55
|
"env": ["git", "node"]
|
|
56
56
|
},
|
|
57
57
|
"agent": {
|
|
58
|
-
"roleName": "developer",
|
|
59
58
|
"agentRole": "manager | worker",
|
|
60
59
|
"llmProvider": "anthropic | openai | google | (empty for default)",
|
|
61
60
|
"llmModel": "model name or empty for default",
|
|
@@ -109,13 +108,14 @@ file_write("~/.markus/builder-artifacts/agents/code-reviewer/POLICIES.md", "# Po
|
|
|
109
108
|
- **`dependencies.env`**: Required CLI tools (e.g., `["git", "node"]`). Omit if none needed.
|
|
110
109
|
|
|
111
110
|
### `agent` section (REQUIRED)
|
|
112
|
-
- **`roleName`**: Base role template from the dynamic context. Determines default tools. Use `developer` as fallback.
|
|
113
111
|
- **`agentRole`**: `"worker"` (executes tasks) or `"manager"` (coordinates, assigns, reviews)
|
|
114
112
|
- **`llmProvider`**, **`llmModel`**, **`temperature`**: LLM configuration. Leave empty for system defaults.
|
|
115
113
|
|
|
114
|
+
**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).
|
|
115
|
+
|
|
116
116
|
## Tool Access Philosophy
|
|
117
117
|
|
|
118
|
-
**All agents have access to all tools
|
|
118
|
+
**All agents have access to all built-in tools.** Security is controlled through the agent's `ROLE.md` and `POLICIES.md`, not through tool restrictions.
|
|
119
119
|
|
|
120
120
|
If an agent needs to be cautious with certain tools, write that into `POLICIES.md`:
|
|
121
121
|
- "Only use `shell_execute` for read-only commands unless explicitly asked"
|
|
@@ -134,7 +134,7 @@ Once all files are written, tell the user:
|
|
|
134
134
|
|
|
135
135
|
## Rules
|
|
136
136
|
|
|
137
|
-
- **DO NOT** invent
|
|
137
|
+
- **DO NOT** invent skill IDs. Only use values from the dynamic context.
|
|
138
138
|
- **DO NOT** put file content in the JSON. Always use `file_write` for files.
|
|
139
139
|
- **DO NOT** default skills to `[]` when relevant skills are available. Check the skills list!
|
|
140
140
|
- **DO NOT** write artifacts to `~/.markus/shared/` or your working directory. Always use `~/.markus/builder-artifacts/agents/{name}/`.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: markitdown
|
|
3
|
+
description: Convert documents (PDF, Word, Excel, PowerPoint, images) to Markdown text for LLM processing
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# MarkItDown File Converter
|
|
7
|
+
|
|
8
|
+
You have access to the MarkItDown MCP tool (`markitdown__convert_to_markdown`) for converting files to Markdown.
|
|
9
|
+
|
|
10
|
+
## When to use
|
|
11
|
+
|
|
12
|
+
Use this tool when:
|
|
13
|
+
- The user asks you to read, analyze, or summarize a document (PDF, Word, Excel, PowerPoint, etc.)
|
|
14
|
+
- You need to extract text content from an image (OCR)
|
|
15
|
+
- The user shares a file path and wants you to understand its contents
|
|
16
|
+
- You are working with a file format that your text tools cannot directly read
|
|
17
|
+
|
|
18
|
+
**Note:** For images attached directly in chat, the system automatically handles conversion when your model doesn't support vision. This skill is for converting files on disk that you encounter during tasks.
|
|
19
|
+
|
|
20
|
+
## Supported formats
|
|
21
|
+
|
|
22
|
+
MarkItDown supports 29+ file formats including:
|
|
23
|
+
- **Documents**: PDF, Word (.docx), PowerPoint (.pptx), Excel (.xlsx/.xls)
|
|
24
|
+
- **Images**: JPEG, PNG, GIF, WebP (EXIF metadata + OCR)
|
|
25
|
+
- **Web**: HTML, XML
|
|
26
|
+
- **Data**: CSV, JSON
|
|
27
|
+
- **Other**: ZIP (iterates contents), EPUB, Outlook messages (.msg)
|
|
28
|
+
|
|
29
|
+
## Usage
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
markitdown__convert_to_markdown({ uri: "file:///path/to/document.pdf" })
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
The tool accepts a file URI and returns the content converted to Markdown format.
|
|
36
|
+
|
|
37
|
+
## Prerequisites
|
|
38
|
+
|
|
39
|
+
MarkItDown requires Python 3.10+ and the `markitdown` package:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
pip install 'markitdown[all]'
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Or install only specific format support:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
pip install 'markitdown[pdf,docx,pptx]'
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Best practices
|
|
52
|
+
|
|
53
|
+
1. **Check file existence first**: Verify the file path is valid before attempting conversion.
|
|
54
|
+
2. **Large files**: For very large documents, the converted markdown may be lengthy. Summarize key sections for the user rather than dumping everything.
|
|
55
|
+
3. **Image OCR quality**: OCR results depend on image clarity. Mention if text extraction seems incomplete.
|
|
56
|
+
4. **Fallback**: If conversion fails (e.g., markitdown not installed), inform the user and suggest installing with `pip install 'markitdown[all]'`.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"type": "skill",
|
|
3
|
+
"name": "markitdown",
|
|
4
|
+
"displayName": "MarkItDown File Converter",
|
|
5
|
+
"version": "1.0.0",
|
|
6
|
+
"description": "Convert documents (PDF, Word, Excel, PowerPoint, images) to Markdown text for LLM processing",
|
|
7
|
+
"author": "markus",
|
|
8
|
+
"category": "data",
|
|
9
|
+
"tags": ["ocr", "pdf", "document", "conversion", "multimodal"],
|
|
10
|
+
"skill": {
|
|
11
|
+
"skillFile": "SKILL.md",
|
|
12
|
+
"requiredPermissions": ["file"],
|
|
13
|
+
"mcpServers": {
|
|
14
|
+
"markitdown": {
|
|
15
|
+
"command": "uvx",
|
|
16
|
+
"args": ["markitdown-mcp"]
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -42,7 +42,8 @@ Skip trivial matters — typos, one-off path errors, situations that won't recur
|
|
|
42
42
|
| Validated pattern from successful task | Observation buffer | `memory_save` with tags: `["insight", ...]` |
|
|
43
43
|
| Multi-step repeatable workflow (personal) | MEMORY.md | `memory_update_longterm({ section: "<your-section>", mode: "patch" })` |
|
|
44
44
|
| Practice worth sharing with the team | Skill package | Create via **skill-building**, install with `builder_install` |
|
|
45
|
-
|
|
|
45
|
+
| Behavioral rule or guiding principle | ROLE.md | `file_read` → `file_edit` to append |
|
|
46
|
+
| New recurring check for your patrol | HEARTBEAT.md | `file_read` → `file_edit` to add/remove items |
|
|
46
47
|
|
|
47
48
|
## Capturing Insights (Observation Buffer)
|
|
48
49
|
|
|
@@ -166,12 +167,23 @@ Only create a skill when you are confident the practice is validated (proven acr
|
|
|
166
167
|
|
|
167
168
|
## Role Evolution (ROLE.md)
|
|
168
169
|
|
|
169
|
-
|
|
170
|
+
ROLE.md is your identity — it is loaded into every conversation and shapes all your behavior. Updating it is one of the **simplest and most impactful** forms of self-evolution.
|
|
170
171
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
172
|
+
### When to Update
|
|
173
|
+
|
|
174
|
+
Modify ROLE.md when you discover a behavioral rule, working style, or guiding principle that should **always** apply to your work. Examples:
|
|
175
|
+
|
|
176
|
+
- "Always run tests before submitting code for review"
|
|
177
|
+
- "When debugging, check logs first before reading source code"
|
|
178
|
+
- "Prefer small, focused PRs over large ones"
|
|
179
|
+
|
|
180
|
+
You do NOT need to accumulate multiple insights first — even a single validated lesson can warrant a role update if it is fundamental and non-obvious.
|
|
181
|
+
|
|
182
|
+
### Guard Rails
|
|
183
|
+
|
|
184
|
+
- **Refine, don't contradict** — New guidelines should extend your core role, not conflict with it
|
|
185
|
+
- **Proven, not speculative** — The principle should be validated by actual task outcomes
|
|
186
|
+
- **Not one-off** — It should apply to future tasks, not just the current situation
|
|
175
187
|
|
|
176
188
|
### How to Modify
|
|
177
189
|
|
|
@@ -180,13 +192,37 @@ The deepest level. Modify ROLE.md only when ALL conditions are met:
|
|
|
180
192
|
3. Use `file_edit` for surgical changes
|
|
181
193
|
4. Log: `memory_save` with tags `["insight", "role-evolution"]`
|
|
182
194
|
|
|
195
|
+
## Heartbeat Customization (HEARTBEAT.md)
|
|
196
|
+
|
|
197
|
+
HEARTBEAT.md is your personal patrol checklist — it controls what you check during each heartbeat cycle. Customizing it is a direct way to evolve your operational behavior.
|
|
198
|
+
|
|
199
|
+
### When to Update
|
|
200
|
+
|
|
201
|
+
- You realize you should be regularly checking for something you currently aren't (e.g., monitoring a specific service, reviewing a certain type of task)
|
|
202
|
+
- A checklist item is obsolete or no longer relevant to your responsibilities
|
|
203
|
+
- You want to change the order or priority of your patrol routine
|
|
204
|
+
|
|
205
|
+
### How to Modify
|
|
206
|
+
|
|
207
|
+
1. Read current HEARTBEAT.md via `file_read`
|
|
208
|
+
2. Add, remove, or reorder checklist items via `file_edit`
|
|
209
|
+
3. Changes take effect at the next heartbeat cycle (the system auto-reloads)
|
|
210
|
+
4. Log: `memory_save` with tags `["insight", "heartbeat-evolution"]`
|
|
211
|
+
|
|
212
|
+
### Examples of Good Heartbeat Additions
|
|
213
|
+
|
|
214
|
+
- "Check if any PR I opened has new review comments"
|
|
215
|
+
- "Verify that the staging deployment matches the latest main branch"
|
|
216
|
+
- "Review `task_list` for tasks blocked more than 24 hours — escalate if needed"
|
|
217
|
+
|
|
183
218
|
## Quality Signal
|
|
184
219
|
|
|
185
220
|
During heartbeat, check your revision rate:
|
|
186
221
|
- Tasks with `executionRound > 1` required revision
|
|
187
222
|
- High revision rate (>30%) means your knowledge isn't being applied effectively
|
|
188
223
|
- Check if saved insights cover the failure patterns you see
|
|
189
|
-
-
|
|
224
|
+
- Consider: would a ROLE.md rule or a HEARTBEAT.md check have prevented any recent failures?
|
|
225
|
+
- Escalate recurring mistakes: insight → MEMORY.md procedure → ROLE.md rule or HEARTBEAT.md check
|
|
190
226
|
|
|
191
227
|
## Rules
|
|
192
228
|
|
|
@@ -37,7 +37,7 @@ This skill teaches you how to create Markus team packages — self-contained dir
|
|
|
37
37
|
|---|---|---|
|
|
38
38
|
| `ANNOUNCEMENT.md` | `~/.markus/teams/{teamId}/ANNOUNCEMENT.md` | Injected into every member's context |
|
|
39
39
|
| `NORMS.md` | `~/.markus/teams/{teamId}/NORMS.md` | Injected into every member's context |
|
|
40
|
-
| `members/{name}/ROLE.md` | `~/.markus/agents/{agentId}/role/ROLE.md` |
|
|
40
|
+
| `members/{name}/ROLE.md` | `~/.markus/agents/{agentId}/role/ROLE.md` | Agent's identity and system prompt |
|
|
41
41
|
| `members/{name}/POLICIES.md` | `~/.markus/agents/{agentId}/role/POLICIES.md` | Additional agent constraints |
|
|
42
42
|
|
|
43
43
|
## Two-Step Workflow
|
|
@@ -72,14 +72,12 @@ This JSON contains ONLY metadata and structure — **no file content**.
|
|
|
72
72
|
{
|
|
73
73
|
"name": "Manager Name",
|
|
74
74
|
"role": "manager",
|
|
75
|
-
"roleName": "project-manager",
|
|
76
75
|
"count": 1,
|
|
77
76
|
"skills": ["skill-id-1"]
|
|
78
77
|
},
|
|
79
78
|
{
|
|
80
79
|
"name": "Worker Name",
|
|
81
80
|
"role": "worker",
|
|
82
|
-
"roleName": "developer",
|
|
83
81
|
"count": 1,
|
|
84
82
|
"skills": ["skill-id-1", "skill-id-2"]
|
|
85
83
|
}
|
|
@@ -148,10 +146,11 @@ file_write("~/.markus/builder-artifacts/teams/research-team/members/senior-resea
|
|
|
148
146
|
### `team.members[]` — Member Specifications (REQUIRED)
|
|
149
147
|
- **`name`**: Display name (the slug for file paths is derived from this)
|
|
150
148
|
- **`role`**: `"manager"` or `"worker"`
|
|
151
|
-
- **`roleName`**: Base role template from the dynamic context
|
|
152
149
|
- **`count`**: Number of instances (default 1)
|
|
153
150
|
- **`skills`**: Skill IDs from the dynamic context. **Actively assign skills — don't leave empty!**
|
|
154
151
|
|
|
152
|
+
**Note**: The `roleName` field is **not needed** for team members. Each member's identity is fully defined by their `ROLE.md` file under `members/{slug}/`. Do NOT include `roleName` unless you specifically want to inherit defaults from a built-in role template (rare).
|
|
153
|
+
|
|
155
154
|
### `team.workflow` — Workflow Configuration (recommended)
|
|
156
155
|
- **`phases`**: Array of phase names defining the team's workflow (e.g., `["plan", "implement", "review", "validate"]`)
|
|
157
156
|
- **`parallelImplementation`**: `true` if multiple members work in parallel during implementation
|
|
@@ -170,7 +169,7 @@ Once all files are written, tell the user:
|
|
|
170
169
|
|
|
171
170
|
## Rules
|
|
172
171
|
|
|
173
|
-
- **DO NOT** invent
|
|
172
|
+
- **DO NOT** invent skill IDs. Only use values from the dynamic context.
|
|
174
173
|
- **DO NOT** leave skills empty when relevant skills are available. Review the skills list!
|
|
175
174
|
- **DO NOT** put file content in the JSON. Always use `file_write` for files.
|
|
176
175
|
- **DO NOT** write artifacts to `~/.markus/shared/` or your working directory. Always use `~/.markus/builder-artifacts/teams/{name}/`.
|