| name | moai-project-batch-questions |
| version | 1.0.0 |
| created | Wed Nov 05 2025 00:00:00 GMT+0000 (Coordinated Universal Time) |
| updated | Wed Nov 05 2025 00:00:00 GMT+0000 (Coordinated Universal Time) |
| status | active |
| description | Standardize AskUserQuestion patterns and provide reusable question templates for batch optimization |
| keywords | batch, questions, templates, optimization, ux, interaction |
| freedom | medium |
| type | project |
| tags | project, questions, batch, templates, ux, optimization |
| allowed-tools | AskUserQuestion |
Project Batch Questions - Skill Guide
Skill Metadata
| Field | Value |
|---|---|
| Skill Name | moai-project-batch-questions |
| Version | 1.0.0 (2025-11-05) |
| Core Tool | AskUserQuestion (Claude Code built-in) |
| UX Goal | 60% interaction reduction through batching |
What It Does
Purpose: Standardize AskUserQuestion patterns with reusable batch templates that reduce user interactions while maintaining clarity.
Key capabilities:
- ✅ Batch Templates: Pre-designed question groups for common scenarios
- ✅ UX Optimization: 60% interaction reduction through strategic batching
- ✅ Multi-language Support: Templates in Korean, English, Japanese, Chinese
- ✅ Response Validation: Built-in validation and processing patterns
- ✅ Error Handling: Graceful handling of invalid or missing responses
Batch Design Philosophy
Traditional vs Batch Approach
Traditional: Q1 → Answer → Q2 → Answer → Q3 → Answer (3 interactions) Batch: Q1 + Q2 + Q3 → All answers at once (1 interaction, 66% reduction)
Batching Rules
| Rule | Description | Example |
|---|---|---|
| Related Questions | Group questions about same topic | Language settings |
| Sequential Logic | Q2 depends on Q1 answer | Team mode conditional questions |
| Same Decision Context | User thinking about same aspect | GitHub + Git workflow |
Core Batch Templates
Template 1: Language Selection Batch (3 questions)
Purpose: Set language preferences for project initialization Interaction Reduction: 3 turns → 1 turn (66% improvement)
const languageBatch = {
questions: [
{
question: "Which language would you like to use for project initialization and documentation?",
header: "Language",
multiSelect: false,
options: [
{ label: "English", description: "All dialogs and documentation in English" },
{ label: "한국어", description: "모든 대화와 문서를 한국어로" },
{ label: "日本語", description: "すべての対話と文書を日本語で" },
{ label: "中文", description: "所有对话和文档使用中文" }
]
},
{
question: "In which language should Alfred's sub-agent prompts be written?",
header: "Agent Prompt",
multiSelect: false,
options: [
{ label: "English (Global Standard)", description: "Reduces token usage by 15-20%" },
{ label: "Selected Language (Localized)", description: "Local efficiency with native language" }
]
},
{
question: "How would you like to be called in our conversations? (max 20 chars)",
header: "Nickname",
multiSelect: false,
options: [
{ label: "Enter custom nickname", description: "Type your preferred name using 'Other' option" }
]
}
]
};
Template 2: Team Mode Settings Batch (2 questions)
Purpose: Configure team-specific GitHub and Git settings
Interaction Reduction: 2 turns → 1 turn (50% improvement)
Conditional: Only shown when mode: "team" detected
const teamModeBatch = {
questions: [
{
question: "[Team Mode] Is 'Automatically delete head branches' enabled in your GitHub repository?",
header: "GitHub Settings",
multiSelect: false,
options: [
{ label: "Yes, already enabled", description: "PR merge 후 자동으로 원격 브랜치 삭제됨" },
{ label: "No, not enabled (Recommended)", description: "Settings → General에서 확인 필요" },
{ label: "Not sure / Need to check", description: "GitHub Settings 확인 후 다시 진행" }
]
},
{
question: "[Team Mode] Which Git workflow should we use for SPEC documents?",
header: "Git Workflow",
multiSelect: false,
options: [
{ label: "Feature Branch + PR", description: "매 SPEC마다 feature 브랜치 생성 → PR 리뷰 → develop 병합" },
{ label: "Direct Commit to Develop", description: "develop에 직접 커밋. 빠른 프로토타이핑에 최적" },
{ label: "Decide per SPEC", description: "SPEC 생성 시마다 매번 선택. 유연성 높지만 결정 필요" }
]
}
]
};
Template 3: Report Generation Batch (1 question)
Purpose: Configure report generation with token cost awareness
const reportGenerationBatch = {
questions: [
{
question: "Configure report generation:\n\n⚡ **Minimal (Recommended)**: Essential reports only (20-30 tokens)\n📊 **Enable**: Full analysis reports (50-60 tokens)\n🚫 **Disable**: No reports (0 tokens)\n\nAffects future /alfred:3-sync costs.",
header: "Report Generation",
multiSelect: false,
options: [
{ label: "⚡ Minimal (Recommended)", description: "80% token reduction, faster sync" },
{ label: "Enable", description: "Complete reports, higher token usage" },
{ label: "🚫 Disable", description: "No automatic reports, zero cost" }
]
}
]
};
Template 4: Domain Selection Batch (Multi-select)
Purpose: Select project domains and technology areas
const domainSelectionBatch = {
questions: [
{
question: "Which domains and technology areas should be included in this project?",
header: "Domains",
multiSelect: true,
options: [
{ label: "Backend API", description: "REST/GraphQL APIs, server-side logic, databases" },
{ label: "Frontend Web", description: "React/Vue/Angular, UI components, client-side" },
{ label: "Mobile App", description: "iOS/Android apps, React Native, Flutter" },
{ label: "DevOps/Infrastructure", description: "CI/CD, Docker, Kubernetes, cloud" },
{ label: "Data/Analytics", description: "Data processing, ML pipelines, analytics" }
]
}
]
};
Response Processing
Validation Function
function validateBatchResponse(responses: Record<string, string>, template: string): ValidationResult {
const errors: string[] = [];
switch (template) {
case 'language-batch':
const validLanguages = ['ko', 'en', 'ja', 'zh'];
if (!validLanguages.includes(responses['Language'])) {
errors.push('Invalid language selection');
}
if (responses['Nickname']?.length > 20) {
errors.push('Nickname must be 20 characters or less');
}
break;
}
return { isValid: errors.length === 0, errors };
}
Configuration Mapping
function mapToConfig(responses: Record<string, string>, template: string): Partial<Config> {
switch (template) {
case 'language-batch':
return {
language: {
conversation_language: responses['Language'],
agent_prompt_language: responses['Agent Prompt'] === 'English (Global Standard)' ? 'english' : 'localized'
},
user: { nickname: responses['Nickname'], selected_at: new Date().toISOString() }
};
case 'team-mode-batch':
return {
github: {
auto_delete_branches: responses['GitHub Settings'] === 'Yes, already enabled',
spec_git_workflow: mapWorkflowToCode(responses['Git Workflow']),
checked_at: new Date().toISOString()
}
};
}
}
Usage Integration
Alfred Command Integration
// In 0-project.md command
async function initializeProject() {
// Step 1: Language selection batch
const languageResponses = await executeBatchTemplate(LANGUAGE_BATCH_TEMPLATE);
// Step 2: Check for team mode
if (isTeamMode()) {
const teamResponses = await executeBatchTemplate(TEAM_MODE_BATCH_TEMPLATE);
}
// Step 3: Report generation batch
const reportResponses = await executeBatchTemplate(REPORT_GENERATION_BATCH_TEMPLATE);
}
Performance Metrics
Interaction Reduction
| Template | Traditional | Batch | Reduction |
|---|---|---|---|
| Language Selection | 3 interactions | 1 interaction | 66% |
| Team Mode Settings | 2 interactions | 1 interaction | 50% |
| Domain Selection | 5+ questions | 1 interaction | 80%+ |
Best Practices
✅ DO
- Group related questions: Same decision context
- Show total question count: "3 questions in this batch"
- Use consistent headers: Short, descriptive (≤12 chars)
- Include progress indicators: "Step 1 of 2"
❌ DON'T
- Overload batches: Max 4 questions per batch
- Mix unrelated topics: Keep thematic cohesion
- Skip validation: Always verify responses
- Ignore cancellation: Handle user gracefully
Quick Reference
Common Use Cases
| Use Case | Template | Questions | Interaction Reduction |
|---|---|---|---|
| Project initialization | Language + Team batches | 5 questions total | 60% |
| Settings modification | Targeted batches | 1-3 questions | 50-80% |
| Feature configuration | Domain-specific batches | 2-4 questions | 75% |
Integration Checklist
- Template selected for use case
- Response validation configured
- Error handling implemented
- Configuration mapping tested
- Multi-language support if needed
End of Skill | Created 2025-11-05 | Optimized for batch interaction reduction