Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add commands/parkerm2/create-claude-workflow/start-pairinggit clone --depth 1 https://github.com/ParkerM2/create-claude-workflowWhat it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00013 | $0.04648 |
| Opus 5 | $0.00006 | $0.02324 |
| Sonnet 5 | $0.00003 | $0.00930 |
| Haiku 4.5 | $0.00001 | $0.00465 |
Grade A, and why
start-pairing scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 3d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 685 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Start Pairing Command
Manages pair programming sessions with structured knowledge transfer. Tracks driver/navigator roles, captures decisions and learnings, and produces session summaries.
Usage
/start-pairing [TICKET_ID] [--topic TOPIC] [--end] [--slack] [--remote]
/start-pairing --end # End active pairing session
/start-pairing --list # List recent pair sessions
Options:
TICKET_ID: Jira ticket ID for context (optional, topic required if omitted)--topic TOPIC: Free-form topic name if not ticket-based--end: End the current active session--slack: Post session summary to Slack--remote: Async pairing mode (leave notes for partner)--list: Show recent pairing sessions
Phase 1: Session Setup
// Check for active session
const getActiveSession = () => {
const sessionDir = '.claude/sessions';
if (!fs.existsSync(sessionDir)) {
return null;
}
const files = fs.readdirSync(sessionDir)
.filter(f => f.startsWith('pair-') && f.endsWith('.md'));
if (!files.length) return null;
// Get most recent
const latest = files.sort().pop();
const content = fs.readFileSync(`${sessionDir}/${latest}`, 'utf8');
// Check if session is still active (no end marker)
if (!content.includes('## Session End')) {
return {
file: `${sessionDir}/${latest}`,
data: content
};
}
return null;
};
// Handle --end flag
if (args.includes('--end')) {
const active = getActiveSession();
if (!active) {
console.log('❌ No active pairing session found');
return;
}
console.log('🛑 Ending pairing session...');
// Jump to Phase 4
await endSession(active.file);
return;
}
// Handle --list flag
if (args.includes('--list')) {
const sessionDir = '.claude/sessions';
if (!fs.existsSync(sessionDir)) {
console.log('No session history');
return;
}
const files = fs.readdirSync(sessionDir)
.filter(f => f.startsWith('pair-') && f.endsWith('.md'))
.sort()
.reverse();
console.log('\n📋 Recent Pairing Sessions:\n');
files.slice(0, 10).forEach(f => {
const content = fs.readFileSync(`${sessionDir}/${f}`, 'utf8');
const match = content.match(/^# Pair Session: (.+)$/m);
const title = match ? match[1] : f;
console.log(`- ${f.replace('.md', '')}\n ${title}`);
});
return;
}
// Detect active session
const activeSession = getActiveSession();
if (activeSession && !args[0]) {
console.log('⚠️ Active pairing session detected:');
console.log(activeSession.data.split('\n').slice(0, 5).join('\n'));
console.log('Use /start-pairing --end to end it, or /start-pairing TICKET to start new');
return;
}
console.log('\n🚀 Starting pair programming session...\n');
// Get ticket ID or topic
let ticketId = args[0];
let topic = null;
if (ticketId && !ticketId.match(/[A-Z]+-\d+/)) {
topic = ticketId;
ticketId = null;
} else if (args.includes('--topic')) {
const idx = args.indexOf('--topic');
topic = args[idx + 1];
}
if (!ticketId && !topic) {
ticketId = await prompt('Ticket ID (or press enter for free topic): ');
if (!ticketId) {
topic = await prompt('Topic for this pairing session: ');
}
}
// Get participants
console.log('\n👥 Pairing Participants\n');
const driver = await prompt('Driver name (who\'s coding): ');
if (!driver) {
console.log('❌ Driver name required');
return;
}
const navigator = await prompt('Navigator name (who\'s reviewing/guiding): ');
if (!navigator) {
console.log('❌ Navigator name required');
return;
}
// Get session goal
const goal = await prompt('\n🎯 Session goal or focus area: ');
const timeBox = await prompt('Time box in minutes (optional): ') || '60';
console.log('✓ Session configured\n');
// Create session directory
const sessionDir = '.claude/sessions';
if (!fs.existsSync(sessionDir)) {
fs.mkdirSync(sessionDir, { recursive: true });
}
// Create session file
const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, -5);
const sessionFile = `${sessionDir}/pair-${timestamp}.md`;
const sessionTitle = ticketId ? `${ticketId} - ${goal}` : `${topic} - ${goal}`;
const initialContent = `# Pair Session: ${sessionTitle}
**Started**: ${new Date().toISOString()}
**Driver**: ${driver}
**Navigator**: ${navigator}
**Time Box**: ${timeBox} minutes
${ticketId ? `**Ticket**: ${ticketId}` : `**Topic**: ${topic}`}
## Session Context
(Loading context...)
## Decisions Made
(Decisions will be tracked here)
## Code Changes
(Summary of code modifications)
## Learnings
(Key learnings and patterns discovered)
## Open Questions
(Unresolved issues or follow-ups)
## Session Notes
(Ongoing session notes)
`;
fs.writeFileSync(sessionFile, initialContent);
console.log(`📝 Session file: ${sessionFile}\n`);
// Store active session reference
const activeFile = `${sessionDir}/.active`;
fs.writeFileSync(activeFile, sessionFile);
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 3d ago First seen · 685 lines · 13 tokens per session scan A 3e18a0cbb0d8
start-pairing is a command published in the GitHub repository ParkerM2/create-claude-workflow (4 stars, last pushed 5mo ago), licensed MIT. It adds 13 tokens to every session and 4,648 once invoked, about $0.0001 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other commands, from other repositories
minutes-ideas
Surface recent voice memos and ideas captured from any device. Use when the user asks "what ideas did I have?", "what were my recent memos?", "what did I record while walking?", or wants to recall a captured thought.
autobot-result
Print the most recent result.md for an autobot session, so the user can see how a bot is doing without attaching to its tmux session.
engage.actions
Execute Phase 7 - Actions on Objectives and Goal Achievement.
version
Show installed vs latest ai-sdlc plugin version. Bypasses the 24h SessionStart cache.
thread
Manage conversation threads (create, switch, update, delete, show).
handoff
Generate or load a session handoff. Usage: /handoff [create|resume].