diff --git a/.claude/agents/presentation-curator.md b/.claude/agents/presentation-curator.md index 1184135..f0d1ff6 100644 --- a/.claude/agents/presentation-curator.md +++ b/.claude/agents/presentation-curator.md @@ -52,6 +52,13 @@ After changes, verify: 3. No duplicate slide numbers exist 4. The `totalSlides` JS variable matches the actual count (it's auto-computed from DOM) 5. Any `goToSlide()` calls in the TOC point to correct slide numbers +6. Weighted slide titles in `vibe-to-agentic-framework` match actual `

` titles in `presentation/index.html` +7. Agent identifiers are consistent across examples (use `frontend-engineer` / `backend-engineer`; do not introduce aliases like `frontend-eng`) +8. Hook references remain canonical (`15 hook events`) in presentation-facing content +9. Do not manually insert `.weight-badge` markup in slide HTML (badges are JS-injected) +10. Settings precedence text must separate user-writable override order from enforced policy (`managed-settings.json`) +11. If slide 32 is touched, ensure skill frontmatter coverage includes `context: fork` +12. Keep the framework skill identity canonical: `presentation/vibe-to-agentic-framework` (do not rename to variants) ### Step 5: Self-Evolution (after every execution) @@ -74,7 +81,15 @@ Update `.claude/skills/presentation/presentation-structure/SKILL.md`: - **Weight Distribution table**: Update section slide ranges and total weights to match the current presentation. - **Section divider examples**: If section divider format changed, update the example HTML. -#### 5c. Update This Agent (yourself) +#### 5c. Cross-Doc Consistency (when claims change) + +If your slide edits change canonical claims that are also documented elsewhere, sync these files in the same execution: + +- `reports/claude-settings.md` for settings precedence and hook counts +- `.claude/hooks/HOOKS-README.md` for hook-event totals and names +- `reports/claude-global-vs-project-settings.md` for settings precedence language + +#### 5d. Update This Agent (yourself) If you encountered an edge case, discovered a new pattern, or found that the workflow needed adjustment, append a brief note to the "Learnings" section below. This helps future invocations avoid the same issues. @@ -82,6 +97,11 @@ If you encountered an edge case, discovered a new pattern, or found that the wor _Findings from previous executions are recorded here. Add new entries as bullet points._ +- Hook-event references drifted across files. Treat `15 hook events` as canonical and sync all docs in the same run. +- Do not use shorthand agent names in examples (`frontend-eng`). Keep identifiers exactly aligned with agent definitions. +- Never hardcode `.weight-badge` in slide HTML; badges are runtime-injected. +- Keep the framework skill name stable as `vibe-to-agentic-framework` to avoid broken skill references. + ## Critical Requirements 1. **Sequential Numbering**: After any add/remove/reorder, renumber ALL slides sequentially diff --git a/.claude/hooks/HOOKS-README.md b/.claude/hooks/HOOKS-README.md index 54aad9c..dfe7618 100644 --- a/.claude/hooks/HOOKS-README.md +++ b/.claude/hooks/HOOKS-README.md @@ -1,17 +1,23 @@ # HOOKS-README contains all the details, scripts, and instructions for the hooks -## Hook Events Overview - [Official 9 Hooks](https://docs.claude.com/en/docs/claude-code/hooks-guide) +## Hook Events Overview - [Official 15 Hooks](https://docs.claude.com/en/docs/claude-code/hooks-guide) Claude Code provides several hook events that run at different points in the workflow: -1. PreToolUse: Runs before tool calls (can block them) -2. PostToolUse: Runs after tool calls complete -3. UserPromptSubmit: Runs when the user submits a prompt, before Claude processes it -4. Notification: Runs when Claude Code sends notifications -5. Stop: Runs when Claude Code finishes responding -6. SubagentStop: Runs when subagent tasks complete -7. PreCompact: Runs before Claude Code is about to run a compact operation -8. SessionStart: Runs when Claude Code starts a new session or resumes an existing session -9. SessionEnd: Runs when Claude Code session ends +1. SessionStart: Runs when Claude Code starts a new session or resumes one +2. SessionEnd: Runs when a Claude Code session ends +3. UserPromptSubmit: Runs when the user submits a prompt +4. PreToolUse: Runs before tool calls (can block them) +5. PostToolUse: Runs after tool calls complete +6. PostToolUseFailure: Runs after tool calls fail +7. PermissionRequest: Runs when Claude asks for a permission decision +8. Notification: Runs when Claude Code sends notifications +9. Stop: Runs when Claude Code finishes responding +10. SubagentStart: Runs when a subagent task begins +11. SubagentStop: Runs when a subagent task completes +12. PreCompact: Runs before Claude runs context compaction +13. Setup: Runs during setup/maintenance workflows +14. TeammateIdle: Runs when an Agent Team teammate goes idle +15. TaskCompleted: Runs when a tracked task reaches completion ## Prerequisites @@ -62,15 +68,22 @@ Edit `.claude/hooks/config/hooks-config.json` for team-wide defaults: ```json { + "disableSessionStartHook": false, + "disableSessionEndHook": false, + "disableUserPromptSubmitHook": false, "disablePreToolUseHook": false, "disablePostToolUseHook": false, - "disableUserPromptSubmitHook": false, + "disablePostToolUseFailureHook": false, + "disablePermissionRequestHook": false, "disableNotificationHook": false, + "disableSubagentStartHook": false, "disableStopHook": false, "disableSubagentStopHook": false, "disablePreCompactHook": false, - "disableSessionStartHook": false, - "disableSessionEndHook": false + "disableSetupHook": false, + "disableTeammateIdleHook": false, + "disableTaskCompletedHook": false, + "disableLogging": true } ``` @@ -87,8 +100,8 @@ Create or edit `.claude/hooks/config/hooks-config.local.json` for personal prefe In this example, only the PostToolUse and SessionStart hooks are overridden locally. All other hooks will use the shared configuration values. -**Note:** Individual hook toggles are checked by the hook script (`.claude/hooks/scripts/hooks.py`). Local settings override shared settings, and if a hook is disabled, the script exits silently without playing any sounds or executing hook logic. +**Note:** Individual hook toggles are checked by the hook script (`.claude/hooks/scripts/hooks.py`). Local settings override shared settings, and if a hook is disabled, the script exits silently without playing sounds or executing hook logic. ### Text to Speech (TTS) website used to generate sounds: https://elevenlabs.io/ -voice used: Samara X \ No newline at end of file +voice used: Samara X diff --git a/.claude/hooks/scripts/hooks.py b/.claude/hooks/scripts/hooks.py index 75bcee9..2c2b044 100644 --- a/.claude/hooks/scripts/hooks.py +++ b/.claude/hooks/scripts/hooks.py @@ -3,7 +3,7 @@ Claude Code Hook Handler ============================================= This script handles events from Claude Code and plays sounds for different hook events. -Supports all 9 Claude Code hooks: https://docs.claude.com/en/docs/claude-code/hooks-guide +Supports all 15 Claude Code hook event names: https://docs.claude.com/en/docs/claude-code/hooks-guide Special handling for git commits: plays pretooluse-git-committing.mp3 """ @@ -24,15 +24,21 @@ except ImportError: # ===== HOOK EVENT TO SOUND FOLDER MAPPING ===== # Maps each hook event to its corresponding sound folder HOOK_SOUND_MAP = { + "SessionStart": "sessionstart", + "SessionEnd": "sessionend", + "UserPromptSubmit": "userpromptsubmit", "PreToolUse": "pretooluse", "PostToolUse": "posttooluse", - "UserPromptSubmit": "userpromptsubmit", + "PostToolUseFailure": "posttoolusefailure", + "PermissionRequest": "permissionrequest", "Notification": "notification", "Stop": "stop", + "SubagentStart": "subagentstart", "SubagentStop": "subagentstop", "PreCompact": "precompact", - "SessionStart": "sessionstart", - "SessionEnd": "sessionend" + "Setup": "setup", + "TeammateIdle": "teammateidle", + "TaskCompleted": "taskcompleted", } # ===== BASH COMMAND PATTERNS ===== @@ -345,4 +351,4 @@ def main(): # Entry point - Python calls main() when the script runs if __name__ == "__main__": - main() \ No newline at end of file + main() diff --git a/.claude/skills/presentation/presentation-styling/SKILL.md b/.claude/skills/presentation/presentation-styling/SKILL.md index ee2696d..f27f4c9 100644 --- a/.claude/skills/presentation/presentation-styling/SKILL.md +++ b/.claude/skills/presentation/presentation-styling/SKILL.md @@ -56,7 +56,7 @@ Inside `.code-block`, use these spans for syntax coloring: ### Content Slide with Two Columns (Good vs Bad) ```html
-

Title +5%

+

Title

Before (Vibe Coding)

@@ -70,6 +70,8 @@ Inside `.code-block`, use these spans for syntax coloring:
``` +Do not hardcode `` in slide HTML. The presentation JavaScript injects and removes weight badges automatically. + ### Content Slide with Code Example ```html
diff --git a/.claude/skills/presentation/vibe-to-agentic-framework/SKILL.md b/.claude/skills/presentation/vibe-to-agentic-framework/SKILL.md index 728daba..36fa19b 100644 --- a/.claude/skills/presentation/vibe-to-agentic-framework/SKILL.md +++ b/.claude/skills/presentation/vibe-to-agentic-framework/SKILL.md @@ -23,9 +23,12 @@ Every technique is demonstrated on a realistic full-stack project: todoapp/ ├── backend/ # FastAPI (Python) │ ├── main.py # App entry + CORS -│ ├── models.py # SQLAlchemy models │ ├── routes/ │ │ └── todos.py # CRUD endpoints +│ │ └── users.py # Auth endpoints +│ ├── models/ +│ │ ├── todo.py # SQLAlchemy Todo model +│ │ └── user.py # SQLAlchemy User model │ └── tests/ │ └── test_todos.py ├── frontend/ # Next.js (TypeScript) @@ -33,7 +36,10 @@ todoapp/ │ │ ├── TodoList.tsx │ │ └── Sidebar.tsx │ ├── pages/ -│ └── styles/ # Tailwind tokens +│ │ ├── index.tsx +│ │ └── todos.tsx +│ └── lib/ +│ └── api.ts # API client └── CLAUDE.md ``` diff --git a/presentation/index.html b/presentation/index.html index f1a374c..740a7ca 100644 --- a/presentation/index.html +++ b/presentation/index.html @@ -763,8 +763,9 @@ When creating or modifying frontend components:
📝
descriptionWhen to invoke — helps Claude auto-discover the skill
🤖
modelOverride which model runs the skill
🔧
allowed-toolsRestrict which tools the skill can use
+
🔁
context: forkRun the skill in an isolated subagent context for complex workflows
-

Three Ways to Invoke

+

Invocation & Execution Modes

# 1. Manual: slash command > /frontend-conventions @@ -773,7 +774,10 @@ When creating or modifying frontend components: # 3. Preloaded: in an agent's frontmatter skills: - - frontend-conventions
+ - frontend-conventions + +# 4. Optional isolation for heavy workflows +context: fork
@@ -826,13 +830,13 @@ When creating or modifying frontend components:

As Main Agent

Replaces default Claude for your conversation.

-
$ claude --agent frontend-eng
+
$ claude --agent frontend-engineer

As Subagent

Spawned in an isolated context via Task tool.

Task( - subagent_type="frontend-eng" + subagent_type="frontend-engineer" prompt="Add a settings page" )
@@ -1447,12 +1451,15 @@ Read(.env) // Block reading secretsSettings Hierarchy

Settings cascade from most specific to least specific. Higher priority wins.

-
# Priority order (highest to lowest): +
# User-writable override order (highest to lowest): 1. Command line flags # --model opus 2. .claude/settings.local.json # Personal, git-ignored 3. .claude/settings.json # Team-shared, committed -4. ~/.claude/settings.json # Global personal -5. managed-settings.json # Organization policies
+4. ~/.claude/settings.local.json # Global personal override +5. ~/.claude/settings.json # Global personal default + +# Policy layer: +managed-settings.json # Organization policy (enforced)
diff --git a/reports/claude-global-vs-project-settings.md b/reports/claude-global-vs-project-settings.md index f1731d6..fe86db7 100644 --- a/reports/claude-global-vs-project-settings.md +++ b/reports/claude-global-vs-project-settings.md @@ -67,17 +67,19 @@ These exist at both levels, with **project-level taking precedence** over global ## Settings Precedence -Settings apply in order from highest to lowest priority: +User-writable settings apply in this override order (highest to lowest): | Priority | Location | Scope | Version Control | Purpose | |----------|----------|-------|-----------------|---------| -| 1 | Managed settings | System | Read-only | Organization/admin policies | +| 1 | Command line flags | Session | N/A | Single-session overrides | | 2 | `.claude/settings.local.json` | Project | No (git-ignored) | Personal project-specific | | 3 | `.claude/settings.json` | Project | Yes (committed) | Team-shared settings | | 4 | `~/.claude/settings.local.json` | User | N/A | Personal global overrides | | 5 | `~/.claude/settings.json` | User | N/A | Global personal settings | -**Important**: `deny` rules have the highest priority and cannot be overridden by any lower-priority settings. +Policy layer: `managed-settings.json` is organization-enforced and cannot be overridden by local files. + +**Important**: `deny` rules have the highest safety precedence and cannot be overridden by lower-priority allow/ask rules. --- diff --git a/reports/claude-settings.md b/reports/claude-settings.md index 72b1218..7e0dab8 100644 --- a/reports/claude-settings.md +++ b/reports/claude-settings.md @@ -28,19 +28,21 @@ A comprehensive guide to all available configuration options in Claude Code's `s ## Settings Hierarchy -Claude Code uses a 4-tier configuration hierarchy (highest to lowest priority): +Claude Code settings use a 5-level user-writable override chain plus an enforced policy layer: | Priority | Location | Scope | Version Control | Purpose | |----------|----------|-------|-----------------|---------| | 1 | Command line arguments | Session | N/A | Single-session overrides | | 2 | `.claude/settings.local.json` | Project | No (git-ignored) | Personal project-specific | | 3 | `.claude/settings.json` | Project | Yes (committed) | Team-shared settings | -| 4 | `~/.claude/settings.json` | User | N/A | Global personal settings | -| 5 | `managed-settings.json` | System | Read-only | Organization policies | +| 4 | `~/.claude/settings.local.json` | User | N/A | Personal global overrides | +| 5 | `~/.claude/settings.json` | User | N/A | Global personal defaults | -**Important**: Later values override earlier ones EXCEPT for: -- `deny` rules (highest priority - cannot be overridden) -- Managed settings (cannot be overridden by any local settings) +**Policy layer**: `managed-settings.json` is organization-enforced and cannot be overridden by local settings. + +**Important**: +- `deny` rules have highest safety precedence and cannot be overridden by lower-priority allow/ask rules. +- Managed settings may lock or override local behavior even if local files specify different values. --- @@ -237,7 +239,7 @@ Control what tools and operations Claude can perform. Execute custom shell commands at various points in Claude Code's lifecycle. -### Hook Events (13 total) +### Hook Events (15 total) | Event | When Fired | Matcher Support | Common Use Cases | |-------|------------|-----------------|------------------| @@ -254,6 +256,8 @@ Execute custom shell commands at various points in Claude Code's lifecycle. | `SubagentStop` | Subagent completes | Yes | Cleanup, validation | | `PreCompact` | Before context compaction | Yes | Backup, logging | | `Setup` | Repository init (`--init`, `--maintenance`) | Yes | One-time setup | +| `TeammateIdle` | Agent Teams teammate goes idle | Yes | Team orchestration, routing | +| `TaskCompleted` | A tracked task is completed | Yes | Progress automation, notifications | ### Hook Configuration Structure