mrvn-cli 0.2.5 → 0.2.8

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 CHANGED
@@ -48,6 +48,7 @@ When you start a chat session, Marvin:
48
48
  ├── questions/ # Q-001.md, Q-002.md, ...
49
49
  ├── meetings/ # 2026-02-08-kickoff.md, ...
50
50
  ├── reports/ # R-001.md, R-002.md, ...
51
+ ├── jira-issues/ # JI-001.md, JI-002.md, ... (Jira skill)
51
52
  ├── use-cases/ # UC-001.md, UC-002.md, ... (SAP AEM)
52
53
  ├── tech-assessments/ # TA-001.md, TA-002.md, ... (SAP AEM)
53
54
  └── extension-designs/ # XD-001.md, XD-002.md, ... (SAP AEM)
@@ -107,6 +108,79 @@ Use Case (PO) Tech Assessment (TL) Extension Design (TL)
107
108
 
108
109
  **Switching methodologies:** Change `methodology` in `.marvin/config.yaml`. Existing files stay on disk. Common tools (meetings, features, epics, reports) remain available. Only methodology-specific CRUD tools are gained/lost.
109
110
 
111
+ ## Skills
112
+
113
+ Skills are composable capabilities that work with any methodology. Unlike plugins (which define a methodology), skills add tools and behaviors that any persona can use.
114
+
115
+ ### Managing skills
116
+
117
+ ```bash
118
+ marvin skills # List available skills and assignments
119
+ marvin skills install jira --as all # Enable for all personas
120
+ marvin skills install jira --as po # Enable for one persona
121
+ marvin skills remove jira --as all # Disable for all personas
122
+ marvin skills remove jira --as po # Disable for one persona
123
+ ```
124
+
125
+ ### Jira Integration
126
+
127
+ Bidirectional sync between Marvin artifacts and Jira issues. Imported issues are stored locally as `JI-xxx` documents in `.marvin/docs/jira-issues/`.
128
+
129
+ **Enabling the skill** — Jira is opt-in. Add it to the `skills` section of `.marvin/config.yaml` for the personas that need it:
130
+
131
+ ```yaml
132
+ skills:
133
+ product-owner: [jira]
134
+ tech-lead: [jira]
135
+ delivery-manager: [jira]
136
+ ```
137
+
138
+ **Authentication** — set three environment variables (no secrets in config files):
139
+
140
+ ```bash
141
+ export JIRA_HOST=yourcompany.atlassian.net
142
+ export JIRA_EMAIL=you@company.com
143
+ export JIRA_API_TOKEN=your-api-token # Generate at https://id.atlassian.com/manage-profile/security/api-tokens
144
+ ```
145
+
146
+ **Tools available to all personas:**
147
+
148
+ | Tool | Direction | Description |
149
+ |------|-----------|-------------|
150
+ | `list_jira_issues` | local read | List locally synced JI-xxx documents, filter by status or Jira key |
151
+ | `get_jira_issue` | local read | Get a JI-xxx by local ID or Jira key |
152
+ | `pull_jira_issue` | Jira → local | Fetch one issue by key, create/update local JI-xxx |
153
+ | `pull_jira_issues_jql` | Jira → local | Bulk fetch via JQL query, create/update local JI-xxx |
154
+ | `push_artifact_to_jira` | local → Jira | Create a Jira issue from any Marvin artifact (D/A/Q/F/E) |
155
+ | `sync_jira_issue` | bidirectional | Push local changes to Jira, pull latest status/assignee/labels back |
156
+ | `link_artifact_to_jira` | local only | Link a Marvin artifact to an existing JI-xxx |
157
+
158
+ **How each persona uses it:**
159
+
160
+ - **Product Owner** — Pull stakeholder-reported issues for triage, push approved features as Stories, link decisions to Jira issues for audit trail
161
+ - **Tech Lead** — Pull technical issues for sprint planning, push epics for cross-team visibility, bidirectional sync to keep governance aligned
162
+ - **Delivery Manager** — Pull sprint issues for progress tracking, push actions for stakeholder visibility, use JQL queries for reporting
163
+
164
+ **JI document frontmatter:**
165
+
166
+ ```yaml
167
+ id: JI-001
168
+ title: "Implement user authentication"
169
+ type: jira-issue
170
+ status: open # mapped from Jira status
171
+ jiraKey: PROJ-123
172
+ jiraUrl: https://yourcompany.atlassian.net/browse/PROJ-123
173
+ issueType: Story
174
+ priority: Medium
175
+ assignee: Jane Doe
176
+ labels: [backend, auth]
177
+ linkedArtifacts: [F-001, D-003]
178
+ tags: [jira:PROJ-123]
179
+ lastSyncedAt: "2026-02-20T10:30:00.000Z"
180
+ ```
181
+
182
+ Tools gracefully handle missing Jira credentials — local read tools (`list_jira_issues`, `get_jira_issue`, `link_artifact_to_jira`) always work, while API-calling tools return a helpful error message asking you to set the environment variables.
183
+
110
184
  ## Commands
111
185
 
112
186
  | Command | Description |
@@ -129,6 +203,12 @@ Use Case (PO) Tech Assessment (TL) Extension Design (TL)
129
203
  | `marvin chat --resume <name>` | Resume a specific session by name |
130
204
  | `marvin sessions` | List all saved chat sessions |
131
205
  | `marvin sessions delete <name>` | Delete a saved session |
206
+ | `marvin skills` | List available skills and persona assignments |
207
+ | `marvin skills install <skill> --as <persona\|all>` | Enable a skill for a persona (or all) |
208
+ | `marvin skills remove <skill> --as <persona\|all>` | Disable a skill for a persona (or all) |
209
+ | `marvin skills create <name>` | Scaffold a new custom skill |
210
+ | `marvin report gar` | Generate a Green/Amber/Red status report (ASCII) |
211
+ | `marvin report gar --format confluence` | GAR report as Confluence-friendly markdown |
132
212
  | `marvin serve` | Start standalone MCP server for Claude Desktop/Code |
133
213
 
134
214
  ## Personas
@@ -172,6 +252,19 @@ Feature (PO) Epic (TL) Sprint (DM)
172
252
 
173
253
  When a sprint links to epics, those epics are auto-tagged with `sprint:SP-xxx`. Work items (actions, decisions, questions) are associated with sprints via the same `sprint:SP-xxx` tag convention. The `generate_sprint_progress` report shows linked epics with statuses, tagged work items grouped by status, and done/total completion %.
174
254
 
255
+ **Sprint planning** is supported by the `gather_sprint_planning_context` tool, which aggregates all planning-relevant data in a single call:
256
+
257
+ | Section | Contents |
258
+ |---------|----------|
259
+ | `approvedFeatures` | Approved features sorted by priority, with epic counts by status |
260
+ | `backlog` | Unassigned non-done epics, sorted by parent feature priority, enriched with feature context and effort estimates |
261
+ | `activeSprint` | Current active sprint with linked epic statuses, work item counts, and completion % |
262
+ | `velocityReference` | Last 2 completed sprints with epic count, effort strings, and work item throughput |
263
+ | `blockers` | Open questions, open risk-finding and blocker-report contributions |
264
+ | `summary` | Total backlog size, approved features with no epics, epics at risk, planned sprint count |
265
+
266
+ When asked to propose a sprint, the DM reasons through priority, capacity, dependencies, and risk to present a structured proposal. The TL focuses on technical readiness, effort balance, and feature coverage. Both personas call this tool automatically before proposing a sprint plan.
267
+
175
268
  This provides **hard enforcement** (epics must link to approved features) combined with **soft guidance** (persona prompts steer each role toward their responsibilities) and **sprint-level tracking** for time-boxed delivery.
176
269
 
177
270
  ## Configuration
@@ -406,14 +499,20 @@ src/agent/ → Claude Agent SDK integration, MCP tools
406
499
  src/mcp/ → Standalone MCP stdio server adapter
407
500
  src/plugins/ → Plugin system (methodology plugins)
408
501
  ├── types.ts → MarvinPlugin interface
409
- ├── common.ts → Shared registrations + tool factory (meetings, reports, features, epics, sprints)
502
+ ├── common.ts → Shared registrations + tool factory (meetings, reports, features, epics, sprints, sprint planning)
410
503
  ├── registry.ts → Plugin resolution
411
504
  └── builtin/
412
505
  ├── generic-agile.ts → Default methodology
413
506
  ├── sap-aem.ts → SAP AEM methodology
414
507
  └── tools/ → Tool implementations per artifact type
508
+ src/reports/ → Report generators (GAR report: collector, evaluator, renderers)
415
509
  src/import/ → Import engine (classifier, resolver, plan/execute)
416
- src/skills/ → Custom skill definitions
510
+ src/skills/ → Skill system (composable capabilities)
511
+ ├── types.ts → SkillDefinition interface
512
+ ├── registry.ts → Skill loading, resolution, tool/prompt collection
513
+ └── builtin/
514
+ ├── governance-review.ts → Governance review skill
515
+ └── jira/ → Jira integration skill (client, tools, definition)
417
516
  src/git/ → Git sync (simple-git wrapper for .marvin/)
418
517
  ```
419
518
 
@@ -422,8 +521,8 @@ Key design decisions:
422
521
  - **One file per artifact** — Better for Git merges and human readability than a single register file
423
522
  - **System prompt composition** — Personas are behavioral modes (different system prompts), not separate agents
424
523
  - **MCP tools for data access** — The agent calls tools to read/write governance data, keeping AI reasoning separate from data operations
425
- - **Extensible storage** — `DocumentStore` accepts plugin-registered types at construction time; `DocumentType` is `string`, not a fixed union
426
- - **Layered capabilities** — Core governance is always available, common tools are shared across methodologies, methodology-specific tools layer on top
524
+ - **Extensible storage** — `DocumentStore` accepts plugin- and skill-registered types at construction time; `DocumentType` is `string`, not a fixed union
525
+ - **Layered capabilities** — Core governance is always available, common tools are shared across methodologies, methodology-specific tools layer on top, and skills (like Jira) compose with any methodology
427
526
 
428
527
  ## Development
429
528
 
package/dist/index.d.ts CHANGED
@@ -247,6 +247,7 @@ interface SkillDefinition {
247
247
  format: SkillFormat;
248
248
  dirPath?: string;
249
249
  personas?: string[];
250
+ documentTypeRegistrations?: DocumentTypeRegistration[];
250
251
  tools?: (store: DocumentStore) => SdkMcpToolDefinition<any>[];
251
252
  promptFragments?: Record<string, string>;
252
253
  actions?: SkillAction[];