cc-dev-template 0.1.50 → 0.1.51
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/bin/install.js +30 -6
- package/package.json +1 -1
- package/src/skills/claude-md/SKILL.md +1 -8
- package/src/skills/claude-md/references/audit.md +1 -10
- package/src/skills/claude-md/references/create.md +2 -2
- package/src/skills/initialize-project/SKILL.md +17 -68
- package/src/skills/initialize-project/templates/CLAUDE.md.template +10 -0
- package/src/skills/initialize-project/templates/CURRENT_WORK.md.template +13 -0
- package/src/skills/initialize-project/templates/INDEX.md.template +7 -0
- package/src/skills/prompting/SKILL.md +9 -116
- package/src/skills/prompting/references/create.md +59 -0
- package/src/skills/prompting/references/principles.md +60 -0
- package/src/skills/prompting/references/review.md +78 -0
- package/src/skills/spec-interview/SKILL.md +4 -26
- package/src/skills/spec-interview/references/step-1-opening.md +21 -0
- package/src/skills/spec-interview/references/step-2-deep-dive.md +77 -0
- package/src/skills/spec-interview/references/step-3-finalize.md +19 -0
- package/src/skills/spec-review/SKILL.md +12 -14
- package/src/skills/spec-to-tasks/SKILL.md +3 -85
- package/src/skills/spec-to-tasks/references/step-1-identify-spec.md +30 -0
- package/src/skills/spec-to-tasks/references/step-2-explore.md +25 -0
- package/src/skills/spec-to-tasks/references/step-3-generate.md +31 -0
- package/src/skills/spec-to-tasks/templates/tasks.yaml +25 -0
- package/src/mcp-servers/qa-server/README.md +0 -122
- package/src/mcp-servers/qa-server/package-lock.json +0 -2015
- package/src/mcp-servers/qa-server/package.json +0 -28
- package/src/mcp-servers/qa-server/src/index.ts +0 -220
- package/src/mcp-servers/qa-server/tsconfig.json +0 -17
- package/src/skills/spec-interview/references/interview-guide.md +0 -123
- package/src/skills/youtube-to-notes/SKILL.md +0 -11
- package/src/skills/youtube-to-notes/references/step-1-setup.md +0 -15
- package/src/skills/youtube-to-notes/references/step-2-download-transcribe.md +0 -13
- package/src/skills/youtube-to-notes/references/step-3-create-documents.md +0 -31
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "qa-server",
|
|
3
|
-
"version": "1.0.0",
|
|
4
|
-
"description": "MCP server that spawns a QA sub-agent for frontend visual inspection",
|
|
5
|
-
"main": "dist/index.js",
|
|
6
|
-
"type": "module",
|
|
7
|
-
"bin": {
|
|
8
|
-
"qa-server": "./dist/index.js"
|
|
9
|
-
},
|
|
10
|
-
"scripts": {
|
|
11
|
-
"build": "tsc",
|
|
12
|
-
"start": "node dist/index.js",
|
|
13
|
-
"dev": "tsx src/index.ts"
|
|
14
|
-
},
|
|
15
|
-
"dependencies": {
|
|
16
|
-
"@anthropic-ai/claude-agent-sdk": "^0.1.30",
|
|
17
|
-
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
18
|
-
"zod": "^3.24.1"
|
|
19
|
-
},
|
|
20
|
-
"devDependencies": {
|
|
21
|
-
"@types/node": "^20.0.0",
|
|
22
|
-
"tsx": "^4.7.0",
|
|
23
|
-
"typescript": "^5.3.0"
|
|
24
|
-
},
|
|
25
|
-
"engines": {
|
|
26
|
-
"node": ">=18.0.0"
|
|
27
|
-
}
|
|
28
|
-
}
|
|
@@ -1,220 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* QA Server - MCP server that spawns a QA sub-agent for frontend visual inspection
|
|
4
|
-
*
|
|
5
|
-
* This server exposes a single `inspect_frontend` tool that:
|
|
6
|
-
* 1. Takes a URL and task description
|
|
7
|
-
* 2. Spawns a Claude sub-agent with Playwright MCP access
|
|
8
|
-
* 3. The sub-agent navigates, screenshots, clicks, and inspects
|
|
9
|
-
* 4. Returns a structured QA report
|
|
10
|
-
*
|
|
11
|
-
* Token savings: ~20k (26 browser tools) → ~500 (1 tool)
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
|
-
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
15
|
-
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
16
|
-
import {
|
|
17
|
-
CallToolRequestSchema,
|
|
18
|
-
ListToolsRequestSchema,
|
|
19
|
-
} from "@modelcontextprotocol/sdk/types.js";
|
|
20
|
-
import { query } from "@anthropic-ai/claude-agent-sdk";
|
|
21
|
-
|
|
22
|
-
// QA Agent system prompt - follows ADR-002: explain WHY, positive framing, clear context
|
|
23
|
-
const QA_SYSTEM_PROMPT = `You are a QA engineer helping developers verify their frontend works correctly.
|
|
24
|
-
|
|
25
|
-
**Why this matters:** Catching visual bugs, console errors, and broken interactions early saves significant debugging time. Your detailed assessment helps developers ship with confidence.
|
|
26
|
-
|
|
27
|
-
**Your capabilities:** You can navigate pages, take screenshots to see the visual state, click elements, fill forms, and read console messages. Screenshots show you exactly what users see.
|
|
28
|
-
|
|
29
|
-
**What makes a great QA report:**
|
|
30
|
-
- Visual Assessment: Describe the layout, colors, and overall appearance
|
|
31
|
-
- Console Errors: List any errors found (or confirm none exist)
|
|
32
|
-
- Task Result: What happened when you performed the requested task
|
|
33
|
-
- Issues Found: Any problems discovered during inspection
|
|
34
|
-
- Overall: PASS or FAIL with a clear reason
|
|
35
|
-
|
|
36
|
-
Focus on what the developer needs to know: visual issues, broken functionality, and console errors. Be thorough in your inspection and clear in your reporting.`;
|
|
37
|
-
|
|
38
|
-
// Create MCP server
|
|
39
|
-
const server = new Server(
|
|
40
|
-
{
|
|
41
|
-
name: "qa-server",
|
|
42
|
-
version: "1.0.0",
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
capabilities: {
|
|
46
|
-
tools: {},
|
|
47
|
-
},
|
|
48
|
-
}
|
|
49
|
-
);
|
|
50
|
-
|
|
51
|
-
// List available tools
|
|
52
|
-
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
53
|
-
return {
|
|
54
|
-
tools: [
|
|
55
|
-
{
|
|
56
|
-
name: "inspect_frontend",
|
|
57
|
-
description:
|
|
58
|
-
"Spawn a QA sub-agent to visually inspect a frontend. The sub-agent can navigate, take screenshots, click elements, fill forms, and check console errors. Returns a structured QA report. Uses Opus for best visual understanding.",
|
|
59
|
-
inputSchema: {
|
|
60
|
-
type: "object",
|
|
61
|
-
properties: {
|
|
62
|
-
url: {
|
|
63
|
-
type: "string",
|
|
64
|
-
description: "URL to inspect (e.g., http://localhost:3000, https://example.com)",
|
|
65
|
-
},
|
|
66
|
-
task: {
|
|
67
|
-
type: "string",
|
|
68
|
-
description:
|
|
69
|
-
"What to inspect or test (e.g., 'Verify the login form works', 'Check for visual regressions on the homepage', 'Test the checkout flow')",
|
|
70
|
-
},
|
|
71
|
-
},
|
|
72
|
-
required: ["url", "task"],
|
|
73
|
-
},
|
|
74
|
-
},
|
|
75
|
-
],
|
|
76
|
-
};
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
// Handle tool calls
|
|
80
|
-
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
81
|
-
if (request.params.name !== "inspect_frontend") {
|
|
82
|
-
throw new Error(`Unknown tool: ${request.params.name}`);
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
const { url, task } = request.params.arguments as { url: string; task: string };
|
|
86
|
-
|
|
87
|
-
if (!url || !task) {
|
|
88
|
-
return {
|
|
89
|
-
content: [
|
|
90
|
-
{
|
|
91
|
-
type: "text",
|
|
92
|
-
text: "Error: Both 'url' and 'task' parameters are required",
|
|
93
|
-
},
|
|
94
|
-
],
|
|
95
|
-
isError: true,
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
console.error(`[QA Server] Starting inspection of ${url}`);
|
|
100
|
-
console.error(`[QA Server] Task: ${task}`);
|
|
101
|
-
|
|
102
|
-
try {
|
|
103
|
-
// Build the task prompt - follows ADR-002: purpose-driven, positive framing
|
|
104
|
-
const taskPrompt = `
|
|
105
|
-
**QA Inspection Request**
|
|
106
|
-
|
|
107
|
-
URL: ${url}
|
|
108
|
-
Task: ${task}
|
|
109
|
-
|
|
110
|
-
**Context:** A developer needs verification that this frontend is working correctly. Your assessment helps them catch issues before users do.
|
|
111
|
-
|
|
112
|
-
**Available tools:**
|
|
113
|
-
- browser_navigate: Go to the URL
|
|
114
|
-
- browser_take_screenshot: See the visual state (use this to understand what the page looks like)
|
|
115
|
-
- browser_click: Click elements
|
|
116
|
-
- browser_fill: Fill form fields
|
|
117
|
-
- browser_get_text: Read page content
|
|
118
|
-
- browser_wait_for: Wait for elements or conditions
|
|
119
|
-
|
|
120
|
-
**Success criteria:** Provide a clear QA report covering visual state, console errors, task completion, and overall pass/fail assessment.
|
|
121
|
-
`;
|
|
122
|
-
|
|
123
|
-
// Spawn sub-agent with Playwright MCP access
|
|
124
|
-
const result = query({
|
|
125
|
-
prompt: taskPrompt,
|
|
126
|
-
options: {
|
|
127
|
-
model: "claude-opus-4-5",
|
|
128
|
-
cwd: process.cwd(),
|
|
129
|
-
systemPrompt: QA_SYSTEM_PROMPT,
|
|
130
|
-
mcpServers: {
|
|
131
|
-
"playwright": {
|
|
132
|
-
command: "npx",
|
|
133
|
-
args: ["@playwright/mcp@latest", "--vision", "--headless"],
|
|
134
|
-
},
|
|
135
|
-
},
|
|
136
|
-
allowedTools: [
|
|
137
|
-
"mcp__playwright__browser_navigate",
|
|
138
|
-
"mcp__playwright__browser_click",
|
|
139
|
-
"mcp__playwright__browser_fill",
|
|
140
|
-
"mcp__playwright__browser_take_screenshot",
|
|
141
|
-
"mcp__playwright__browser_wait_for",
|
|
142
|
-
"mcp__playwright__browser_get_text",
|
|
143
|
-
"mcp__playwright__browser_hover",
|
|
144
|
-
"mcp__playwright__browser_press_key",
|
|
145
|
-
"mcp__playwright__browser_scroll",
|
|
146
|
-
"mcp__playwright__browser_get_url",
|
|
147
|
-
],
|
|
148
|
-
},
|
|
149
|
-
});
|
|
150
|
-
|
|
151
|
-
// Collect the agent's final response
|
|
152
|
-
let report = "";
|
|
153
|
-
let totalCost = 0;
|
|
154
|
-
|
|
155
|
-
for await (const message of result) {
|
|
156
|
-
// Log progress to stderr (visible in server logs, not returned to client)
|
|
157
|
-
if (message.type === "system" && message.subtype === "init") {
|
|
158
|
-
console.error(`[QA Server] Agent initialized with tools: ${message.tools.length} tools`);
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
if (message.type === "assistant") {
|
|
162
|
-
// Extract text responses from assistant messages
|
|
163
|
-
const textBlocks = message.message.content.filter(
|
|
164
|
-
(c: any) => c.type === "text"
|
|
165
|
-
);
|
|
166
|
-
for (const block of textBlocks) {
|
|
167
|
-
report = block.text; // Keep latest text as the report
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
// Log tool calls
|
|
171
|
-
const toolCalls = message.message.content.filter(
|
|
172
|
-
(c: any) => c.type === "tool_use"
|
|
173
|
-
);
|
|
174
|
-
for (const tool of toolCalls) {
|
|
175
|
-
console.error(`[QA Server] Tool call: ${tool.name}`);
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
if (message.type === "result") {
|
|
180
|
-
totalCost = message.total_cost_usd;
|
|
181
|
-
console.error(`[QA Server] Completed. Cost: $${totalCost.toFixed(4)}`);
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
// Return the QA report
|
|
186
|
-
return {
|
|
187
|
-
content: [
|
|
188
|
-
{
|
|
189
|
-
type: "text",
|
|
190
|
-
text: report || "No report generated. The agent may have encountered an issue.",
|
|
191
|
-
},
|
|
192
|
-
],
|
|
193
|
-
};
|
|
194
|
-
} catch (error) {
|
|
195
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
196
|
-
console.error(`[QA Server] Error: ${errorMessage}`);
|
|
197
|
-
|
|
198
|
-
return {
|
|
199
|
-
content: [
|
|
200
|
-
{
|
|
201
|
-
type: "text",
|
|
202
|
-
text: `QA inspection failed: ${errorMessage}`,
|
|
203
|
-
},
|
|
204
|
-
],
|
|
205
|
-
isError: true,
|
|
206
|
-
};
|
|
207
|
-
}
|
|
208
|
-
});
|
|
209
|
-
|
|
210
|
-
// Start the server
|
|
211
|
-
async function main() {
|
|
212
|
-
const transport = new StdioServerTransport();
|
|
213
|
-
await server.connect(transport);
|
|
214
|
-
console.error("[QA Server] Started and ready for connections");
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
main().catch((error) => {
|
|
218
|
-
console.error("[QA Server] Fatal error:", error);
|
|
219
|
-
process.exit(1);
|
|
220
|
-
});
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"target": "ES2022",
|
|
4
|
-
"module": "NodeNext",
|
|
5
|
-
"moduleResolution": "NodeNext",
|
|
6
|
-
"outDir": "./dist",
|
|
7
|
-
"rootDir": "./src",
|
|
8
|
-
"strict": true,
|
|
9
|
-
"esModuleInterop": true,
|
|
10
|
-
"skipLibCheck": true,
|
|
11
|
-
"forceConsistentCasingInFileNames": true,
|
|
12
|
-
"declaration": true,
|
|
13
|
-
"resolveJsonModule": true
|
|
14
|
-
},
|
|
15
|
-
"include": ["src/**/*"],
|
|
16
|
-
"exclude": ["node_modules", "dist"]
|
|
17
|
-
}
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
# Interview Guide
|
|
2
|
-
|
|
3
|
-
## The Interview Flow
|
|
4
|
-
|
|
5
|
-
This is a conversation, not a checklist march. But ensure all areas get covered naturally.
|
|
6
|
-
|
|
7
|
-
### Opening
|
|
8
|
-
|
|
9
|
-
Start with open-ended understanding:
|
|
10
|
-
- "Tell me about this feature. What problem does it solve?"
|
|
11
|
-
- "Who will use this? What's their goal?"
|
|
12
|
-
- "Walk me through what success looks like."
|
|
13
|
-
|
|
14
|
-
Let the user talk. Ask follow-ups on anything unclear.
|
|
15
|
-
|
|
16
|
-
### Areas to Cover
|
|
17
|
-
|
|
18
|
-
Cover these naturally through conversation. Don't force the order.
|
|
19
|
-
|
|
20
|
-
**Intent & Goals**
|
|
21
|
-
- What is the user trying to accomplish?
|
|
22
|
-
- Why does this matter? What's the business/user value?
|
|
23
|
-
- What does success look like? How will we know it's working?
|
|
24
|
-
|
|
25
|
-
**Integration Points**
|
|
26
|
-
- What existing parts of the system does this touch?
|
|
27
|
-
- Are there external services, APIs, or libraries involved?
|
|
28
|
-
- What data flows in and out?
|
|
29
|
-
|
|
30
|
-
→ *Use subagents to investigate the current codebase when integration questions arise.*
|
|
31
|
-
|
|
32
|
-
**Data Model**
|
|
33
|
-
- What entities/objects are involved?
|
|
34
|
-
- What are the relationships between them?
|
|
35
|
-
- What constraints exist (required fields, validations, limits)?
|
|
36
|
-
- Are we extending existing models or creating new ones?
|
|
37
|
-
|
|
38
|
-
**Behavior & Flows**
|
|
39
|
-
- What are the main user flows?
|
|
40
|
-
- What triggers this feature? What happens step by step?
|
|
41
|
-
- Are there different modes or variations?
|
|
42
|
-
|
|
43
|
-
**Edge Cases & Error Handling**
|
|
44
|
-
- What can go wrong?
|
|
45
|
-
- What happens with invalid input?
|
|
46
|
-
- What are the boundary conditions?
|
|
47
|
-
- How do we handle partial failures?
|
|
48
|
-
|
|
49
|
-
**Acceptance Criteria**
|
|
50
|
-
- How do we verify this works?
|
|
51
|
-
- What are the specific, testable requirements?
|
|
52
|
-
- What would make this "done"?
|
|
53
|
-
|
|
54
|
-
**Blockers & Dependencies**
|
|
55
|
-
- What external dependencies exist? (APIs, services, libraries)
|
|
56
|
-
- Are there credentials, API keys, or access needed?
|
|
57
|
-
- Are there decisions that need to be made before implementation?
|
|
58
|
-
- Is anything waiting on external input?
|
|
59
|
-
|
|
60
|
-
### Research During Interview
|
|
61
|
-
|
|
62
|
-
When you need to understand something about the current system, external libraries, or technical feasibility:
|
|
63
|
-
|
|
64
|
-
- Use **Explore agents** to investigate the codebase or research external APIs/libraries
|
|
65
|
-
- Use **Plan agents** to evaluate technical approaches or architectural decisions
|
|
66
|
-
|
|
67
|
-
Keep the main interview context clean. Agents return only the relevant findings you need to continue the conversation.
|
|
68
|
-
|
|
69
|
-
### Writing the Spec
|
|
70
|
-
|
|
71
|
-
As you gather information, write to `docs/specs/<name>/spec.md`. Update it incrementally during the conversation.
|
|
72
|
-
|
|
73
|
-
**Spec structure:**
|
|
74
|
-
|
|
75
|
-
```markdown
|
|
76
|
-
# [Feature Name]
|
|
77
|
-
|
|
78
|
-
## Overview
|
|
79
|
-
[2-3 sentences: what this is and why it matters]
|
|
80
|
-
|
|
81
|
-
## Goals
|
|
82
|
-
- [Primary goal]
|
|
83
|
-
- [Secondary goals if any]
|
|
84
|
-
|
|
85
|
-
## Integration Points
|
|
86
|
-
[How this connects to existing system]
|
|
87
|
-
- Touches: [existing components]
|
|
88
|
-
- External: [APIs, services, libraries]
|
|
89
|
-
- Data flows: [in/out]
|
|
90
|
-
|
|
91
|
-
## Data Model
|
|
92
|
-
[Entities, relationships, constraints]
|
|
93
|
-
|
|
94
|
-
## Behavior
|
|
95
|
-
### [Flow 1]
|
|
96
|
-
[Step by step]
|
|
97
|
-
|
|
98
|
-
### [Flow 2]
|
|
99
|
-
[Step by step]
|
|
100
|
-
|
|
101
|
-
## Edge Cases
|
|
102
|
-
- [Edge case]: [how handled]
|
|
103
|
-
|
|
104
|
-
## Acceptance Criteria
|
|
105
|
-
- [ ] [Testable requirement]
|
|
106
|
-
- [ ] [Testable requirement]
|
|
107
|
-
|
|
108
|
-
## Blockers
|
|
109
|
-
- [ ] [Blocker]: [what's needed]
|
|
110
|
-
- [ ] [Decision needed]: [options]
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
### Completion Check
|
|
114
|
-
|
|
115
|
-
When the spec seems complete, invoke the `spec-review` skill and specify which spec to review in the prompt. It analyzes the spec and returns feedback. If gaps are found, ask follow-up questions. Repeat until review passes.
|
|
116
|
-
|
|
117
|
-
### Finalizing
|
|
118
|
-
|
|
119
|
-
Once review passes:
|
|
120
|
-
1. Confirm with user and show the final spec
|
|
121
|
-
2. Ask if they want to proceed to task breakdown
|
|
122
|
-
|
|
123
|
-
If yes, invoke the `spec-to-tasks` skill and specify which spec to break down.
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: youtube-to-notes
|
|
3
|
-
description: This skill should be used when the user asks to "transcribe this YouTube video", "turn this video into notes", "get me notes from this YouTube talk", "summarize this YouTube video", "convert this video to markdown", or says "youtube to notes". Activate when the user wants to download, transcribe, and summarize a YouTube video into structured Markdown documents.
|
|
4
|
-
argument-hint: "[url or search query]"
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# YouTube to Notes
|
|
8
|
-
|
|
9
|
-
## What To Do Now
|
|
10
|
-
|
|
11
|
-
Read `references/step-1-setup.md`.
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
# Setup
|
|
2
|
-
|
|
3
|
-
Verify `yt-dlp` and `whisper` are installed.
|
|
4
|
-
|
|
5
|
-
If either is missing, tell the user the exact install command (`brew install yt-dlp` or `brew install openai-whisper`) and stop.
|
|
6
|
-
|
|
7
|
-
## Resolve the Video
|
|
8
|
-
|
|
9
|
-
The user provides either a YouTube URL or a search query via `$ARGUMENTS`.
|
|
10
|
-
|
|
11
|
-
**If it's a URL:** Store it and move on.
|
|
12
|
-
|
|
13
|
-
**If it's a search query:** Use yt-dlp to search YouTube for the top 5 results. Display each result's title, channel, duration, and URL. Ask the user to pick one.
|
|
14
|
-
|
|
15
|
-
Read `references/step-2-download-transcribe.md` when a video URL is confirmed.
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
# Download and Transcribe
|
|
2
|
-
|
|
3
|
-
## Download Audio
|
|
4
|
-
|
|
5
|
-
Use yt-dlp to extract audio as high-quality MP3 from the selected URL. Use the video title as the output filename.
|
|
6
|
-
|
|
7
|
-
## Transcribe
|
|
8
|
-
|
|
9
|
-
Run Whisper on the MP3 file using the `base` model. Output format: plain text, current directory.
|
|
10
|
-
|
|
11
|
-
If the user requested higher accuracy, use `small` or `medium` instead — warn that these are significantly slower.
|
|
12
|
-
|
|
13
|
-
Read `references/step-3-create-documents.md` when the `.txt` transcript file exists.
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
# Create Documents
|
|
2
|
-
|
|
3
|
-
Read the raw `.txt` transcript from Whisper. Create two Markdown files in the current directory.
|
|
4
|
-
|
|
5
|
-
## Transcript: `<video-title>-transcript.md`
|
|
6
|
-
|
|
7
|
-
| Element | Instructions |
|
|
8
|
-
|---------|-------------|
|
|
9
|
-
| **YAML frontmatter** | `title`, `channel`, `url`, `date` (today), `duration` |
|
|
10
|
-
| **Section headers** (`##`) | Insert where the topic shifts |
|
|
11
|
-
| **Paragraphs** | Break at natural pause points into short, readable paragraphs |
|
|
12
|
-
| **Speaker labels** | Label speakers in conversations when confident from context. Omit when unsure. |
|
|
13
|
-
| **Code blocks** | Wrap any code mentioned in the video |
|
|
14
|
-
| **Blockquotes** | Use for notable quotes |
|
|
15
|
-
|
|
16
|
-
## Summary: `<video-title>-summary.md`
|
|
17
|
-
|
|
18
|
-
| Section | Content |
|
|
19
|
-
|---------|---------|
|
|
20
|
-
| **YAML frontmatter** | Same fields as transcript, plus `type: summary` |
|
|
21
|
-
| **Overview** | 2-3 sentence summary |
|
|
22
|
-
| **Key Points** | 5-10 bullets of the most important ideas |
|
|
23
|
-
| **Notable Quotes** | 3-5 direct quotes (include approximate timestamps if available from Whisper output) |
|
|
24
|
-
| **Action Items / Takeaways** | Concrete recommendations or next steps from the video |
|
|
25
|
-
| **Related Topics** | Keywords or topics for further research |
|
|
26
|
-
|
|
27
|
-
## Cleanup
|
|
28
|
-
|
|
29
|
-
Delete the intermediate `.mp3` and `.txt` files unless the user asked to keep them.
|
|
30
|
-
|
|
31
|
-
Tell the user what files were created and their full paths.
|