Deterministic operations for managing clarification sessions.
/plugin marketplace add JesseHenson/claude_code_apex_marketplace/plugin install spec-iterator-mcp@claude-code-apex-marketplaceThis skill inherits all available tools. When active, it can use any tool Claude has access to.
Deterministic operations for managing clarification sessions.
Provides reliable, consistent session CRUD operations with no AI interpretation needed.
function createSession(requirement: string, context?: Context): Session {
const session: Session = {
id: generateUUID(),
requirement,
context: context || {},
status: 'in_progress',
round: 1,
clarifications: [],
assumptions: [],
completeness: {
overall: 0,
functional: 0,
technical: 0,
ux: 0,
edgeCases: 0,
constraints: 0
},
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString()
};
saveSession(session);
return session;
}
function loadSession(sessionId: string): Session | null {
const path = `outputs/sessions/${sessionId}.json`;
if (!exists(path)) return null;
return JSON.parse(readFile(path));
}
function saveSession(session: Session): void {
session.updatedAt = new Date().toISOString();
const path = `outputs/sessions/${session.id}.json`;
writeFile(path, JSON.stringify(session, null, 2));
}
function listSessions(): SessionSummary[] {
const files = glob('outputs/sessions/*.json');
return files.map(file => {
const session = JSON.parse(readFile(file));
return {
id: session.id,
requirement: session.requirement.substring(0, 50) + '...',
status: session.status,
completeness: session.completeness.overall,
updatedAt: session.updatedAt
};
});
}
function updateStatus(sessionId: string, status: SessionStatus): void {
const session = loadSession(sessionId);
if (!session) throw new Error('Session not found');
session.status = status;
saveSession(session);
}
function addClarification(
sessionId: string,
questionId: string,
answer: string
): void {
const session = loadSession(sessionId);
if (!session) throw new Error('Session not found');
const pending = session.pendingQuestions?.find(q => q.id === questionId);
if (!pending) throw new Error('Question not found');
session.clarifications.push({
questionId,
question: pending.question,
answer,
category: pending.category,
answeredAt: new Date().toISOString()
});
session.pendingQuestions = session.pendingQuestions?.filter(
q => q.id !== questionId
);
saveSession(session);
}
interface Session {
id: string;
requirement: string;
context: Context;
status: SessionStatus;
round: number;
clarifications: Clarification[];
pendingQuestions?: Question[];
assumptions: Assumption[];
completeness: Completeness;
specPath?: string;
createdAt: string;
updatedAt: string;
}
type SessionStatus = 'in_progress' | 'ready_to_generate' | 'complete';
interface Context {
domain?: string;
audience?: string;
complexity?: 'simple' | 'moderate' | 'complex';
}
interface Clarification {
questionId: string;
question: string;
answer: string;
category: Category;
answeredAt: string;
}
interface Question {
id: string;
question: string;
category: Category;
priority: Priority;
why?: string;
buildsOn?: string;
}
type Category = 'functional' | 'technical' | 'ux' | 'edge_case' | 'constraint';
type Priority = 'critical' | 'important' | 'nice_to_have';
interface Completeness {
overall: number;
functional: number;
technical: number;
ux: number;
edgeCases: number;
constraints: number;
}
interface Assumption {
fromQuestion?: string;
assumption: string;
reason: string;
}
outputs/
├── sessions/
│ ├── abc123-def456.json
│ └── xyz789-uvw012.json
└── specs/
├── sales-dashboard-spec.md
└── user-auth-spec.json
Commands use this skill for all session persistence:
<!-- In start.md -->
1. Use `session-manager` skill to create new session
2. Pass session to requirement-analyzer agent
3. Save returned questions to session
<!-- In answer.md -->
1. Use `session-manager` skill to load session
2. Use `session-manager` to add clarifications
3. Pass to question-generator agent
4. Save new questions to session
Creating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems. Create original algorithmic art rather than copying existing artists' work to avoid copyright violations.
Applies Anthropic's official brand colors and typography to any sort of artifact that may benefit from having Anthropic's look-and-feel. Use it when brand colors or style guidelines, visual formatting, or company design standards apply.
Create beautiful visual art in .png and .pdf documents using design philosophy. You should use this skill when the user asks to create a poster, piece of art, design, or other static piece. Create original visual designs, never copying existing artists' work to avoid copyright violations.