mrvn-cli 0.2.6 → 0.2.9
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 +89 -3
- package/dist/index.d.ts +8 -1
- package/dist/index.js +968 -254
- package/dist/index.js.map +1 -1
- package/dist/marvin-serve.js +637 -46
- package/dist/marvin-serve.js.map +1 -1
- package/dist/marvin.js +968 -254
- package/dist/marvin.js.map +1 -1
- package/package.json +1 -1
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
|
|
@@ -425,8 +505,14 @@ src/plugins/ → Plugin system (methodology plugins)
|
|
|
425
505
|
├── generic-agile.ts → Default methodology
|
|
426
506
|
├── sap-aem.ts → SAP AEM methodology
|
|
427
507
|
└── tools/ → Tool implementations per artifact type
|
|
508
|
+
src/reports/ → Report generators (GAR report: collector, evaluator, renderers)
|
|
428
509
|
src/import/ → Import engine (classifier, resolver, plan/execute)
|
|
429
|
-
src/skills/ →
|
|
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)
|
|
430
516
|
src/git/ → Git sync (simple-git wrapper for .marvin/)
|
|
431
517
|
```
|
|
432
518
|
|
|
@@ -435,8 +521,8 @@ Key design decisions:
|
|
|
435
521
|
- **One file per artifact** — Better for Git merges and human readability than a single register file
|
|
436
522
|
- **System prompt composition** — Personas are behavioral modes (different system prompts), not separate agents
|
|
437
523
|
- **MCP tools for data access** — The agent calls tools to read/write governance data, keeping AI reasoning separate from data operations
|
|
438
|
-
- **Extensible storage** — `DocumentStore` accepts plugin-registered types at construction time; `DocumentType` is `string`, not a fixed union
|
|
439
|
-
- **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
|
|
440
526
|
|
|
441
527
|
## Development
|
|
442
528
|
|
package/dist/index.d.ts
CHANGED
|
@@ -2,10 +2,16 @@ import { SdkMcpToolDefinition, McpSdkServerConfigWithInstance, AgentDefinition }
|
|
|
2
2
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
3
3
|
import { Command } from 'commander';
|
|
4
4
|
|
|
5
|
+
interface JiraUserConfig {
|
|
6
|
+
host?: string;
|
|
7
|
+
email?: string;
|
|
8
|
+
apiToken?: string;
|
|
9
|
+
}
|
|
5
10
|
interface MarvinUserConfig {
|
|
6
11
|
apiKey?: string;
|
|
7
12
|
defaultModel?: string;
|
|
8
13
|
defaultPersona?: string;
|
|
14
|
+
jira?: JiraUserConfig;
|
|
9
15
|
}
|
|
10
16
|
interface GitConfig {
|
|
11
17
|
remote?: string;
|
|
@@ -247,6 +253,7 @@ interface SkillDefinition {
|
|
|
247
253
|
format: SkillFormat;
|
|
248
254
|
dirPath?: string;
|
|
249
255
|
personas?: string[];
|
|
256
|
+
documentTypeRegistrations?: DocumentTypeRegistration[];
|
|
250
257
|
tools?: (store: DocumentStore) => SdkMcpToolDefinition<any>[];
|
|
251
258
|
promptFragments?: Record<string, string>;
|
|
252
259
|
actions?: SkillAction[];
|
|
@@ -296,4 +303,4 @@ declare function startStdioServer(options: StdioServerOptions): Promise<void>;
|
|
|
296
303
|
|
|
297
304
|
declare function createProgram(): Command;
|
|
298
305
|
|
|
299
|
-
export { ApiKeyMissingError, COMMON_REGISTRATIONS, CORE_DOCUMENT_TYPES, ConfigError, type Document, type DocumentFrontmatter, type DocumentQuery, DocumentStore, type DocumentType, type DocumentTypeRegistration, type IngestOptions, type IngestResult, MarvinError, type MarvinPlugin, type MarvinProjectConfig, type MarvinUserConfig, type MergedConfig, type PersonaDefinition, ProjectNotFoundError, type SessionEntry, type SessionOptions, SessionStore, type SkillAction, type SkillDefinition, type SkillFormat, type SkillInfo, type SourceFileEntry, type SourceFileStatus, type SourceManifest, SourceManifestManager, type StdioServerOptions, buildSystemPrompt, collectTools, createCommonTools, createMarvinMcpServer, createProgram, findProjectRoot, getConfig, getPersona, getPluginPromptFragment, getPluginTools, getSkillAgentDefinitions, getSkillPromptFragment, getSkillTools, isMarvinProject, listPersonas, loadAllSkills, loadProject, loadSkillFromDirectory, loadUserConfig, migrateYamlToSkillMd, parseDocument, registerSdkTools, resolvePersonaId, resolvePlugin, resolveSkillsForPersona, saveUserConfig, serializeDocument, startSession, startStdioServer };
|
|
306
|
+
export { ApiKeyMissingError, COMMON_REGISTRATIONS, CORE_DOCUMENT_TYPES, ConfigError, type Document, type DocumentFrontmatter, type DocumentQuery, DocumentStore, type DocumentType, type DocumentTypeRegistration, type IngestOptions, type IngestResult, type JiraUserConfig, MarvinError, type MarvinPlugin, type MarvinProjectConfig, type MarvinUserConfig, type MergedConfig, type PersonaDefinition, ProjectNotFoundError, type SessionEntry, type SessionOptions, SessionStore, type SkillAction, type SkillDefinition, type SkillFormat, type SkillInfo, type SourceFileEntry, type SourceFileStatus, type SourceManifest, SourceManifestManager, type StdioServerOptions, buildSystemPrompt, collectTools, createCommonTools, createMarvinMcpServer, createProgram, findProjectRoot, getConfig, getPersona, getPluginPromptFragment, getPluginTools, getSkillAgentDefinitions, getSkillPromptFragment, getSkillTools, isMarvinProject, listPersonas, loadAllSkills, loadProject, loadSkillFromDirectory, loadUserConfig, migrateYamlToSkillMd, parseDocument, registerSdkTools, resolvePersonaId, resolvePlugin, resolveSkillsForPersona, saveUserConfig, serializeDocument, startSession, startStdioServer };
|