moai-adk 0.4.7__py3-none-any.whl → 0.4.8__py3-none-any.whl

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.

Potentially problematic release.


This version of moai-adk might be problematic. Click here for more details.

Files changed (101) hide show
  1. moai_adk/templates/.claude/agents/alfred/cc-manager.md +188 -954
  2. moai_adk/templates/.claude/agents/alfred/debug-helper.md +4 -5
  3. moai_adk/templates/.claude/agents/alfred/doc-syncer.md +2 -2
  4. moai_adk/templates/.claude/agents/alfred/git-manager.md +2 -2
  5. moai_adk/templates/.claude/agents/alfred/implementation-planner.md +3 -3
  6. moai_adk/templates/.claude/agents/alfred/project-manager.md +6 -6
  7. moai_adk/templates/.claude/agents/alfred/quality-gate.md +4 -6
  8. moai_adk/templates/.claude/agents/alfred/skill-factory.md +36 -36
  9. moai_adk/templates/.claude/agents/alfred/spec-builder.md +2 -2
  10. moai_adk/templates/.claude/agents/alfred/tag-agent.md +2 -2
  11. moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +3 -3
  12. moai_adk/templates/.claude/agents/alfred/trust-checker.md +5 -5
  13. moai_adk/templates/.claude/commands/alfred/0-project.md +98 -42
  14. moai_adk/templates/.claude/commands/alfred/1-plan.md +7 -7
  15. moai_adk/templates/.claude/commands/alfred/2-run.md +36 -36
  16. moai_adk/templates/.claude/commands/alfred/3-sync.md +10 -10
  17. moai_adk/templates/.claude/hooks/alfred/alfred_hooks.py +14 -1
  18. moai_adk/templates/.claude/hooks/alfred/core/__init__.py +115 -33
  19. moai_adk/templates/.claude/hooks/alfred/handlers/session.py +8 -9
  20. moai_adk/templates/.claude/hooks/alfred/handlers/tool.py +6 -6
  21. moai_adk/templates/.claude/hooks/alfred/handlers/user.py +5 -4
  22. moai_adk/templates/.claude/output-styles/alfred/agentic-coding.md +1 -1
  23. moai_adk/templates/.claude/output-styles/alfred/moai-adk-learning.md +1 -1
  24. moai_adk/templates/.claude/output-styles/alfred/study-with-alfred.md +1 -1
  25. moai_adk/templates/.claude/settings.json +42 -2
  26. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/SKILL.md +480 -0
  27. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/examples.md +257 -0
  28. moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/reference.md +120 -0
  29. moai_adk/templates/.claude/skills/moai-cc-agents/SKILL.md +249 -0
  30. moai_adk/templates/.claude/skills/moai-cc-agents/templates/agent-template.md +32 -0
  31. moai_adk/templates/.claude/skills/moai-cc-claude-md/SKILL.md +278 -0
  32. moai_adk/templates/.claude/skills/moai-cc-claude-md/templates/CLAUDE-template.md +26 -0
  33. moai_adk/templates/.claude/skills/moai-cc-commands/SKILL.md +287 -0
  34. moai_adk/templates/.claude/skills/moai-cc-commands/templates/command-template.md +21 -0
  35. moai_adk/templates/.claude/skills/moai-cc-hooks/SKILL.md +232 -0
  36. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/pre-bash-check.sh +19 -0
  37. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/preserve-permissions.sh +19 -0
  38. moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/validate-bash-command.py +24 -0
  39. moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/SKILL.md +179 -0
  40. moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/templates/settings-mcp-template.json +39 -0
  41. moai_adk/templates/.claude/skills/moai-cc-memory/SKILL.md +296 -0
  42. moai_adk/templates/.claude/skills/moai-cc-memory/templates/session-summary-template.md +18 -0
  43. moai_adk/templates/.claude/skills/moai-cc-settings/SKILL.md +243 -0
  44. moai_adk/templates/.claude/skills/moai-cc-settings/templates/settings-complete-template.json +30 -0
  45. moai_adk/templates/.claude/skills/moai-cc-skills/SKILL.md +271 -0
  46. moai_adk/templates/.claude/skills/moai-cc-skills/templates/SKILL-template.md +15 -0
  47. moai_adk/templates/.claude/skills/moai-skill-factory/EXAMPLES.md +261 -35
  48. moai_adk/templates/.claude/skills/moai-skill-factory/INTERACTIVE-DISCOVERY.md +15 -15
  49. moai_adk/templates/.claude/skills/moai-skill-factory/PARALLEL-ANALYSIS-REPORT.md +429 -0
  50. moai_adk/templates/.claude/skills/moai-skill-factory/PYTHON-VERSION-MATRIX.md +391 -0
  51. moai_adk/templates/.claude/skills/moai-skill-factory/SKILL-FACTORY-WORKFLOW.md +431 -0
  52. moai_adk/templates/.claude/skills/moai-skill-factory/SKILL.md +33 -33
  53. moai_adk/templates/.claude/skills/moai-skill-factory/STEP-BY-STEP-GUIDE.md +466 -0
  54. moai_adk/templates/.claude/skills/moai-skill-factory/reference.md +438 -42
  55. moai_adk/templates/.claude/skills/moai-spec-authoring/README.md +129 -0
  56. moai_adk/templates/.claude/skills/moai-spec-authoring/SKILL.md +1300 -0
  57. moai_adk/templates/.claude/skills/moai-spec-authoring/examples/validate-spec.sh +161 -0
  58. moai_adk/templates/CLAUDE.md +101 -93
  59. {moai_adk-0.4.7.dist-info → moai_adk-0.4.8.dist-info}/METADATA +537 -146
  60. {moai_adk-0.4.7.dist-info → moai_adk-0.4.8.dist-info}/RECORD +63 -73
  61. moai_adk/templates/.claude/skills/moai-alfred-code-reviewer/SKILL.md +0 -113
  62. moai_adk/templates/.claude/skills/moai-alfred-code-reviewer/examples.md +0 -29
  63. moai_adk/templates/.claude/skills/moai-alfred-code-reviewer/reference.md +0 -28
  64. moai_adk/templates/.claude/skills/moai-alfred-debugger-pro/SKILL.md +0 -113
  65. moai_adk/templates/.claude/skills/moai-alfred-debugger-pro/examples.md +0 -29
  66. moai_adk/templates/.claude/skills/moai-alfred-debugger-pro/reference.md +0 -28
  67. moai_adk/templates/.claude/skills/moai-alfred-performance-optimizer/SKILL.md +0 -113
  68. moai_adk/templates/.claude/skills/moai-alfred-performance-optimizer/examples.md +0 -29
  69. moai_adk/templates/.claude/skills/moai-alfred-performance-optimizer/reference.md +0 -28
  70. moai_adk/templates/.claude/skills/moai-alfred-refactoring-coach/SKILL.md +0 -113
  71. moai_adk/templates/.claude/skills/moai-alfred-refactoring-coach/examples.md +0 -29
  72. moai_adk/templates/.claude/skills/moai-alfred-refactoring-coach/reference.md +0 -28
  73. moai_adk/templates/.claude/skills/moai-alfred-tui-survey/SKILL.md +0 -635
  74. moai_adk/templates/.claude/skills/moai-alfred-tui-survey/examples.md +0 -992
  75. moai_adk/templates/.claude/skills/moai-alfred-tui-survey/reference.md +0 -801
  76. moai_adk/templates/.claude/skills/moai-claude-code/SKILL.md +0 -121
  77. moai_adk/templates/.claude/skills/moai-claude-code/examples.md +0 -29
  78. moai_adk/templates/.claude/skills/moai-claude-code/reference.md +0 -28
  79. moai_adk/templates/.claude/skills/moai-claude-code/templates/agent-full.md +0 -332
  80. moai_adk/templates/.claude/skills/moai-claude-code/templates/command-full.md +0 -384
  81. moai_adk/templates/.claude/skills/moai-claude-code/templates/plugin-full.json +0 -363
  82. moai_adk/templates/.claude/skills/moai-claude-code/templates/settings-full.json +0 -595
  83. moai_adk/templates/.claude/skills/moai-claude-code/templates/skill-full.md +0 -496
  84. moai_adk/templates/.claude/skills/moai-lang-clojure/SKILL.md +0 -123
  85. moai_adk/templates/.claude/skills/moai-lang-clojure/examples.md +0 -29
  86. moai_adk/templates/.claude/skills/moai-lang-clojure/reference.md +0 -30
  87. moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +0 -124
  88. moai_adk/templates/.claude/skills/moai-lang-elixir/examples.md +0 -29
  89. moai_adk/templates/.claude/skills/moai-lang-elixir/reference.md +0 -31
  90. moai_adk/templates/.claude/skills/moai-lang-haskell/SKILL.md +0 -124
  91. moai_adk/templates/.claude/skills/moai-lang-haskell/examples.md +0 -29
  92. moai_adk/templates/.claude/skills/moai-lang-haskell/reference.md +0 -31
  93. moai_adk/templates/.claude/skills/moai-lang-julia/SKILL.md +0 -123
  94. moai_adk/templates/.claude/skills/moai-lang-julia/examples.md +0 -29
  95. moai_adk/templates/.claude/skills/moai-lang-julia/reference.md +0 -30
  96. moai_adk/templates/.claude/skills/moai-lang-lua/SKILL.md +0 -123
  97. moai_adk/templates/.claude/skills/moai-lang-lua/examples.md +0 -29
  98. moai_adk/templates/.claude/skills/moai-lang-lua/reference.md +0 -30
  99. {moai_adk-0.4.7.dist-info → moai_adk-0.4.8.dist-info}/WHEEL +0 -0
  100. {moai_adk-0.4.7.dist-info → moai_adk-0.4.8.dist-info}/entry_points.txt +0 -0
  101. {moai_adk-0.4.7.dist-info → moai_adk-0.4.8.dist-info}/licenses/LICENSE +0 -0
@@ -4,8 +4,8 @@
4
4
  Common type definitions and utility functions
5
5
  """
6
6
 
7
- from dataclasses import asdict, dataclass, field
8
- from typing import Any, NotRequired, TypedDict
7
+ from dataclasses import dataclass, field
8
+ from typing import Any, Literal, NotRequired, TypedDict
9
9
 
10
10
 
11
11
  class HookPayload(TypedDict):
@@ -16,63 +16,145 @@ class HookPayload(TypedDict):
16
16
  """
17
17
 
18
18
  cwd: str
19
- userPrompt: NotRequired[str] # Includes only UserPromptSubmit events
19
+ userPrompt: NotRequired[str] # Includes only UserPromptSubmit events
20
20
  tool: NotRequired[str] # PreToolUse/PostToolUse events
21
21
  arguments: NotRequired[dict[str, Any]] # Tool arguments
22
22
 
23
23
 
24
24
  @dataclass
25
25
  class HookResult:
26
- """Hook execution result"""
26
+ """Hook execution result following Claude Code standard schema.
27
+
28
+ Attributes conform to Claude Code Hook output specification:
29
+ https://docs.claude.com/en/docs/claude-code/hooks
30
+
31
+ Standard Fields (Claude Code schema):
32
+ continue_execution: Allow execution to continue (default True)
33
+ suppress_output: Suppress hook output display (default False)
34
+ decision: "approve" or "block" operation (optional)
35
+ reason: Explanation for decision (optional)
36
+ permission_decision: "allow", "deny", or "ask" (optional)
37
+
38
+ MoAI-ADK Fields (wrapped in hookSpecificOutput):
39
+ system_message: Message displayed to user
40
+ context_files: List of context files to load
41
+ suggestions: Suggestions for user
42
+ exit_code: Exit code (for diagnostics)
43
+ """
44
+
45
+ # Claude Code standard fields
46
+ continue_execution: bool = True
47
+ suppress_output: bool = False
48
+ decision: Literal["approve", "block"] | None = None
49
+ reason: str | None = None
50
+ permission_decision: Literal["allow", "deny", "ask"] | None = None
27
51
 
28
- message: str | None = None
29
- systemMessage: str | None = None # Message displayed directly to the user # noqa: N815
30
- blocked: bool = False
31
- contextFiles: list[str] = field(default_factory=list) # noqa: N815
52
+ # MoAI-ADK custom fields (wrapped in hookSpecificOutput)
53
+ system_message: str | None = None
54
+ context_files: list[str] = field(default_factory=list)
32
55
  suggestions: list[str] = field(default_factory=list)
33
- exitCode: int = 0 # noqa: N815
56
+ exit_code: int = 0
34
57
 
35
58
  def to_dict(self) -> dict[str, Any]:
36
- """Dictionary conversion for general Hook"""
37
- return asdict(self)
59
+ """Convert to Claude Code standard Hook output schema.
60
+
61
+ Returns:
62
+ Dictionary conforming to Claude Code Hook specification with:
63
+ - Top-level fields: continue, suppressOutput, decision, reason, permissionDecision
64
+ - Nested field: hookSpecificOutput containing MoAI-ADK-specific data
65
+
66
+ Examples:
67
+ >>> result = HookResult(continue_execution=True)
68
+ >>> result.to_dict()
69
+ {'continue': True}
70
+
71
+ >>> result = HookResult(decision="block", reason="Dangerous")
72
+ >>> result.to_dict()
73
+ {'decision': 'block', 'reason': 'Dangerous'}
74
+
75
+ >>> result = HookResult(system_message="Test", context_files=["a.txt"])
76
+ >>> result.to_dict()
77
+ {'continue': True, 'hookSpecificOutput': {'systemMessage': 'Test', 'contextFiles': ['a.txt']}}
78
+ """
79
+ output: dict[str, Any] = {}
80
+
81
+ # Add decision or continue flag
82
+ if self.decision:
83
+ output["decision"] = self.decision
84
+ if self.reason:
85
+ output["reason"] = self.reason
86
+ else:
87
+ output["continue"] = self.continue_execution
88
+
89
+ # Add suppressOutput if True
90
+ if self.suppress_output:
91
+ output["suppressOutput"] = True
92
+
93
+ # Add permissionDecision if set
94
+ if self.permission_decision:
95
+ output["permissionDecision"] = self.permission_decision
96
+
97
+ # Wrap MoAI-ADK custom fields in hookSpecificOutput
98
+ hook_output: dict[str, Any] = {}
99
+
100
+ if self.system_message:
101
+ hook_output["systemMessage"] = self.system_message
102
+
103
+ if self.context_files:
104
+ hook_output["contextFiles"] = self.context_files
105
+
106
+ if self.suggestions:
107
+ hook_output["suggestions"] = self.suggestions
108
+
109
+ if self.exit_code != 0:
110
+ hook_output["exitCode"] = self.exit_code
111
+
112
+ # Only add hookSpecificOutput if there's custom data
113
+ if hook_output:
114
+ output["hookSpecificOutput"] = hook_output
115
+
116
+ return output
38
117
 
39
118
  def to_user_prompt_submit_dict(self) -> dict[str, Any]:
40
- """UserPromptSubmit Hook-specific output format
119
+ """UserPromptSubmit Hook-specific output format.
41
120
 
42
- Claude Code requires a special schema for UserPromptSubmit:
43
- {
44
- "hookEventName": "UserPromptSubmit",
45
- "additionalContext": "string (required)"
46
- }
121
+ Claude Code requires a special schema for UserPromptSubmit events.
122
+ The result is wrapped in the standard Hook schema with hookSpecificOutput.
47
123
 
48
124
  Returns:
49
- Claude Code UserPromptSubmit Hook Dictionary matching schema
125
+ Claude Code UserPromptSubmit Hook Dictionary matching schema:
126
+ {
127
+ "continue": true,
128
+ "hookSpecificOutput": {
129
+ "hookEventName": "UserPromptSubmit",
130
+ "additionalContext": "string"
131
+ }
132
+ }
50
133
 
51
134
  Examples:
52
- >>> result = HookResult(contextFiles=["tests/"])
135
+ >>> result = HookResult(context_files=["tests/"])
53
136
  >>> result.to_user_prompt_submit_dict()
54
- {'hookEventName': 'UserPromptSubmit', 'additionalContext': '📎 Context: tests/'}
137
+ {'continue': True, 'hookSpecificOutput': {'hookEventName': 'UserPromptSubmit', 'additionalContext': '📎 Context: tests/'}}
55
138
  """
56
- # Convert contextFiles to additionalContext string
57
- if self.contextFiles:
58
- context_str = "\n".join([f"📎 Context: {f}" for f in self.contextFiles])
139
+ # Convert context_files to additionalContext string
140
+ if self.context_files:
141
+ context_str = "\n".join([f"📎 Context: {f}" for f in self.context_files])
59
142
  else:
60
143
  context_str = ""
61
144
 
62
- # Add message if there is one
63
- if self.message:
145
+ # Add system_message if there is one
146
+ if self.system_message:
64
147
  if context_str:
65
- context_str = f"{self.message}\n\n{context_str}"
148
+ context_str = f"{self.system_message}\n\n{context_str}"
66
149
  else:
67
- context_str = self.message
68
-
69
- # If the string is empty, use default
70
- if not context_str:
71
- context_str = ""
150
+ context_str = self.system_message
72
151
 
73
152
  return {
74
- "hookEventName": "UserPromptSubmit",
75
- "additionalContext": context_str
153
+ "continue": self.continue_execution,
154
+ "hookSpecificOutput": {
155
+ "hookEventName": "UserPromptSubmit",
156
+ "additionalContext": context_str
157
+ }
76
158
  }
77
159
 
78
160
 
@@ -19,7 +19,7 @@ def handle_session_start(payload: HookPayload) -> HookResult:
19
19
  payload: Claude Code event payload (cwd key required)
20
20
 
21
21
  Returns:
22
- HookResult(message=project status summary message, systemMessage=for user display)
22
+ HookResult(system_message=project status summary message)
23
23
 
24
24
  Message Format:
25
25
  🚀 MoAI-ADK Session Started
@@ -31,14 +31,15 @@ def handle_session_start(payload: HookPayload) -> HookResult:
31
31
 
32
32
  Note:
33
33
  - Claude Code processes SessionStart in several stages (clear → compact)
34
- - Display message only at compact stage to prevent duplicate output
35
- - "clear" step returns empty result (invisible to user)
34
+ - Display message only at "compact" stage to prevent duplicate output
35
+ - "clear" step returns minimal result (empty hookSpecificOutput)
36
36
 
37
37
  TDD History:
38
38
  - RED: Session startup message format test
39
39
  - GREEN: Generate status message by combining helper functions
40
40
  - REFACTOR: Improved message format, improved readability, added checkpoint list
41
41
  - FIX: Prevent duplicate output of clear step (only compact step is displayed)
42
+ - UPDATE: Migrated to Claude Code standard Hook schema
42
43
 
43
44
  @TAG:CHECKPOINT-EVENT-001
44
45
  """
@@ -46,7 +47,8 @@ def handle_session_start(payload: HookPayload) -> HookResult:
46
47
  # Ignore the "clear" stage and output messages only at the "compact" stage
47
48
  event_phase = payload.get("phase", "")
48
49
  if event_phase == "clear":
49
- return HookResult() # returns an empty result (prevents duplicate output)
50
+ # Return minimal valid Hook result for clear phase
51
+ return HookResult(continue_execution=True)
50
52
 
51
53
  cwd = payload.get("cwd", ".")
52
54
  language = detect_language(cwd)
@@ -59,7 +61,7 @@ def handle_session_start(payload: HookPayload) -> HookResult:
59
61
  changes = git_info.get("changes", 0)
60
62
  spec_progress = f"{specs['completed']}/{specs['total']}"
61
63
 
62
- # systemMessage: displayed directly to the user
64
+ # system_message: displayed directly to the user
63
65
  lines = [
64
66
  "🚀 MoAI-ADK Session Started",
65
67
  f" Language: {language}",
@@ -78,10 +80,7 @@ def handle_session_start(payload: HookPayload) -> HookResult:
78
80
 
79
81
  system_message = "\n".join(lines)
80
82
 
81
- return HookResult(
82
- message=system_message, # for Claude context
83
- systemMessage=system_message, # For user display
84
- )
83
+ return HookResult(system_message=system_message)
85
84
 
86
85
 
87
86
  def handle_session_end(payload: HookPayload) -> HookResult:
@@ -20,8 +20,8 @@ def handle_pre_tool_use(payload: HookPayload) -> HookResult:
20
20
 
21
21
  Returns:
22
22
  HookResult(
23
- message=checkpoint creation notification (when danger is detected);
24
- blocked=False (always continue operation)
23
+ system_message=checkpoint creation notification (when danger is detected);
24
+ continue_execution=True (always continue operation)
25
25
  )
26
26
 
27
27
  Checkpoint Triggers:
@@ -34,7 +34,7 @@ def handle_pre_tool_use(payload: HookPayload) -> HookResult:
34
34
  → "🛡️ Checkpoint created: before-delete-20251015-143000"
35
35
 
36
36
  Notes:
37
- - Return blocked=False even after detection of danger (continue operation)
37
+ - Return continue_execution=True even after detection of danger (continue operation)
38
38
  - Work continues even when checkpoint fails (ignores)
39
39
  - Transparent background operation
40
40
 
@@ -52,14 +52,14 @@ def handle_pre_tool_use(payload: HookPayload) -> HookResult:
52
52
  checkpoint_branch = create_checkpoint(cwd, operation_type)
53
53
 
54
54
  if checkpoint_branch != "checkpoint-failed":
55
- message = (
55
+ system_message = (
56
56
  f"🛡️ Checkpoint created: {checkpoint_branch}\n"
57
57
  f" Operation: {operation_type}"
58
58
  )
59
59
 
60
- return HookResult(message=message, blocked=False)
60
+ return HookResult(system_message=system_message, continue_execution=True)
61
61
 
62
- return HookResult(blocked=False)
62
+ return HookResult(continue_execution=True)
63
63
 
64
64
 
65
65
  def handle_post_tool_use(payload: HookPayload) -> HookResult:
@@ -20,22 +20,23 @@ def handle_user_prompt_submit(payload: HookPayload) -> HookResult:
20
20
 
21
21
  Returns:
22
22
  HookResult(
23
- message=Number of Files loaded (or None),
24
- contextFiles=Recommended document path list
23
+ system_message=Number of Files loaded (or None),
24
+ context_files=Recommended document path list
25
25
  )
26
26
 
27
27
  TDD History:
28
28
  - RED: JIT document loading scenario testing
29
29
  - GREEN: Recommend documents by calling get_jit_context()
30
30
  - REFACTOR: Message conditional display (only when there is a file)
31
+ - UPDATE: Migrated to Claude Code standard Hook schema with snake_case fields
31
32
  """
32
33
  user_prompt = payload.get("userPrompt", "")
33
34
  cwd = payload.get("cwd", ".")
34
35
  context_files = get_jit_context(user_prompt, cwd)
35
36
 
36
- message = f"📎 Loaded {len(context_files)} context file(s)" if context_files else None
37
+ system_message = f"📎 Loaded {len(context_files)} context file(s)" if context_files else None
37
38
 
38
- return HookResult(message=message, contextFiles=context_files)
39
+ return HookResult(system_message=system_message, context_files=context_files)
39
40
 
40
41
 
41
42
  __all__ = ["handle_user_prompt_submit"]
@@ -4,7 +4,7 @@ description: Agent-based coding mode that integrates hands-on development and co
4
4
  ---
5
5
 
6
6
  # Agentic Coding
7
- > Interactive prompts rely on `Skill("moai-alfred-tui-survey")` so AskUserQuestion renders TUI selection menus for user surveys and approvals.
7
+ > Interactive prompts rely on `Skill("moai-alfred-interactive-questions")` so AskUserQuestion renders TUI selection menus for user surveys and approvals.
8
8
 
9
9
  **Audience**: Professional developers, team leaders, architects
10
10
 
@@ -4,7 +4,7 @@ description: Learning mode to easily learn MoAI-ADK concepts and workflow
4
4
  ---
5
5
 
6
6
  # MoAI ADK Learning
7
- > Interactive prompts rely on `Skill("moai-alfred-tui-survey")` so AskUserQuestion renders TUI selection menus for user surveys and approvals.
7
+ > Interactive prompts rely on `Skill("moai-alfred-interactive-questions")` so AskUserQuestion renders TUI selection menus for user surveys and approvals.
8
8
 
9
9
  **Audience**: Developers new to MoAI-ADK
10
10
 
@@ -4,7 +4,7 @@ description: Learning mode to easily learn new skills with Alfred
4
4
  ---
5
5
 
6
6
  # Study with Alfred
7
- > Interactive prompts rely on `Skill("moai-alfred-tui-survey")` so AskUserQuestion renders TUI selection menus for user surveys and approvals.
7
+ > Interactive prompts rely on `Skill("moai-alfred-interactive-questions")` so AskUserQuestion renders TUI selection menus for user surveys and approvals.
8
8
 
9
9
  **Audience**: Developers looking to learn new technologies/languages/frameworks
10
10
 
@@ -6,18 +6,58 @@
6
6
  "PYTHON_ENV": "{{PROJECT_MODE}}"
7
7
  },
8
8
  "hooks": {
9
+ "SessionStart": [
10
+ {
11
+ "hooks": [
12
+ {
13
+ "command": "uv run \"$CLAUDE_PROJECT_DIR\"/.claude/hooks/alfred/alfred_hooks.py SessionStart",
14
+ "type": "command"
15
+ }
16
+ ]
17
+ }
18
+ ],
9
19
  "PreToolUse": [
10
20
  {
11
21
  "hooks": [
12
22
  {
13
- "command": "uv run .claude/hooks/alfred/alfred_hooks.py PreToolUse",
23
+ "command": "uv run \"$CLAUDE_PROJECT_DIR\"/.claude/hooks/alfred/alfred_hooks.py PreToolUse",
14
24
  "type": "command"
15
25
  }
16
26
  ],
17
27
  "matcher": "Edit|Write|MultiEdit"
18
28
  }
19
29
  ],
20
- "PostToolUse": []
30
+ "UserPromptSubmit": [
31
+ {
32
+ "hooks": [
33
+ {
34
+ "command": "uv run \"$CLAUDE_PROJECT_DIR\"/.claude/hooks/alfred/alfred_hooks.py UserPromptSubmit",
35
+ "type": "command"
36
+ }
37
+ ]
38
+ }
39
+ ],
40
+ "SessionEnd": [
41
+ {
42
+ "hooks": [
43
+ {
44
+ "command": "uv run \"$CLAUDE_PROJECT_DIR\"/.claude/hooks/alfred/alfred_hooks.py SessionEnd",
45
+ "type": "command"
46
+ }
47
+ ]
48
+ }
49
+ ],
50
+ "PostToolUse": [
51
+ {
52
+ "hooks": [
53
+ {
54
+ "command": "uv run \"$CLAUDE_PROJECT_DIR\"/.claude/hooks/alfred/alfred_hooks.py PostToolUse",
55
+ "type": "command"
56
+ }
57
+ ],
58
+ "matcher": "Edit|Write|MultiEdit"
59
+ }
60
+ ]
21
61
  },
22
62
  "permissions": {
23
63
  "defaultMode": "default",