@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.
@@ -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-Bm8JwOPl.js"></script>
15
- <link rel="stylesheet" crossorigin href="/assets/index-CRfXZ2wF.css">
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@markus-global/cli",
3
- "version": "0.4.20",
3
+ "version": "0.4.22",
4
4
  "description": "Markus — AI Digital Workforce Platform",
5
5
  "type": "module",
6
6
  "license": "AGPL-3.0-or-later",
@@ -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
- - Use `deliverable_create` to publish outputs that benefit the team: files, architectural decisions, conventions, gotchas, troubleshooting tips
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 flag outdated entries or update metadata
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 Publish Deliverables
308
- - After completing a task, publish what you learned if it would save others time
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
- - Create reports summarizing research or analysis findings
312
+ - Register reports summarizing research or analysis findings
312
313
 
313
314
  ### Quality Guidelines
314
315
  - Write clear, searchable titles
315
- - Include context and rationale, not just facts
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, produce the report via `deliverable_create`. 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.
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, produce the report via `deliverable_create`. 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.
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` is loaded as the agent's system prompt and **overrides** the base role template's default prompt.
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 provided by their role template.** Security is controlled through the agent's `ROLE.md` and `POLICIES.md`, not through tool restrictions.
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 role names or skill IDs. Only use values from the dynamic context.
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
- | 3+ related insights behavioral rule | ROLE.md | Readappend log change |
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
- The deepest level. Modify ROLE.md only when ALL conditions are met:
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
- 1. **Pattern threshold** — 3+ related insights pointing to a fundamental behavioral change
172
- 2. **High confidence** — Proven by successfully completed tasks
173
- 3. **Systemic impact** Affects many future tasks
174
- 4. **Not contradicting core role** — Refines or extends, doesn't contradict
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
- - Escalate recurring mistakes: insight MEMORY.md procedure role update
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` | Overrides base role template prompt |
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 role names or skill IDs. Only use values from the dynamic context.
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}/`.