Execute FABER phase hooks (pre/post phase boundaries)
Executes FABER phase hooks at workflow boundaries (pre/post phases). Triggers when workflow reaches a phase boundary with configured hooks for documents, scripts, or skills.
/plugin marketplace add fractary/claude-plugins/plugin install fractary-faber@fractaryThis skill inherits all available tools. When active, it can use any tool Claude has access to.
scripts/hooks-execute-all.shHook boundaries: pre_frame, post_frame, pre_architect, post_architect, pre_build, post_build, pre_evaluate, post_evaluate, pre_release, post_release
Hook types:
<CRITICAL_RULES> YOU MUST:
../core/scripts/)YOU MUST NOT:
<HOOK_STRUCTURE>
{
"hooks": {
"pre_frame": [
{
"type": "document",
"path": "./hooks/pre-frame-checklist.md",
"description": "Pre-frame checklist"
}
],
"post_architect": [
{
"type": "script",
"path": "./hooks/validate-spec.sh",
"timeout": 60,
"description": "Validate generated spec"
}
],
"pre_release": [
{
"type": "skill",
"skill": "fractary-docs:readme-updater",
"parameters": {"section": "changelog"},
"description": "Update changelog"
}
]
}
}
</HOOK_STRUCTURE>
<OPERATIONS>List hooks configured for a specific boundary.
Script: ../core/scripts/hook-list.sh
Parameters:
boundary (required): Hook boundary (e.g., "pre_frame", "post_build")workflow_id (optional): Workflow to check (default: "default")Returns:
{
"status": "success",
"operation": "list-hooks",
"boundary": "pre_frame",
"hooks": [
{
"type": "document",
"path": "./hooks/pre-frame-checklist.md",
"description": "Pre-frame checklist"
}
],
"count": 1
}
Execution:
../core/scripts/hook-list.sh "$BOUNDARY" "$CONFIG_PATH"
Validate a single hook definition.
Script: ../core/scripts/hook-validate.sh
Parameters:
hook_json (required): Hook definition as JSONReturns:
{
"status": "success",
"operation": "validate-hook",
"valid": true,
"hook_type": "script",
"path_exists": true
}
Or on failure:
{
"status": "error",
"operation": "validate-hook",
"valid": false,
"errors": ["Script not found: ./hooks/missing.sh"]
}
Execution:
../core/scripts/hook-validate.sh "$HOOK_JSON"
Execute a single hook.
Script: ../core/scripts/hook-execute.sh
Parameters:
hook_json (required): Hook definition as JSONcontext_json (optional): Context to pass to hook (work_id, phase, etc.)Returns:
For document hooks:
{
"status": "success",
"operation": "execute-hook",
"hook_type": "document",
"action_required": "read",
"path": "./hooks/pre-frame-checklist.md",
"message": "Read and follow instructions in the document"
}
For script hooks:
{
"status": "success",
"operation": "execute-hook",
"hook_type": "script",
"exit_code": 0,
"output": "Validation passed"
}
For skill hooks:
{
"status": "success",
"operation": "execute-hook",
"hook_type": "skill",
"action_required": "invoke",
"skill": "fractary-docs:readme-updater",
"parameters": {"section": "changelog"}
}
Execution:
../core/scripts/hook-execute.sh "$HOOK_JSON" "$CONTEXT_JSON"
Execute all hooks for a boundary.
Parameters:
boundary (required): Hook boundary (e.g., "pre_frame", "post_build")context_json (optional): Context to pass to hooksworkflow_id (optional): Workflow to use (default: "default")continue_on_error (optional): Whether to continue if a hook fails (default: false)Returns:
{
"status": "success",
"operation": "execute-all",
"boundary": "pre_frame",
"hooks_executed": 2,
"hooks_succeeded": 2,
"hooks_failed": 0,
"results": [
{
"hook": {"type": "document", "path": "..."},
"status": "success",
"action_required": "read"
},
{
"hook": {"type": "script", "path": "..."},
"status": "success",
"exit_code": 0
}
],
"actions_required": [
{
"type": "read_document",
"path": "./hooks/pre-frame-checklist.md"
}
]
}
Execution:
Get all valid hook boundaries.
Returns:
{
"status": "success",
"operation": "get-boundaries",
"boundaries": [
"pre_frame", "post_frame",
"pre_architect", "post_architect",
"pre_build", "post_build",
"pre_evaluate", "post_evaluate",
"pre_release", "post_release"
],
"count": 10
}
</OPERATIONS>
<WORKFLOW>
When invoked with an operation:
Parse Request
Execute Operation
list-hooks: Query workflow config for boundaryvalidate-hook: Check hook structure and pathsexecute-hook: Run appropriate handler based on typeexecute-all: Iterate through all hooks for boundaryHandle Hook Types
Return Result
actions_required for document/skill hooks<HOOK_EXECUTION_DETAILS>
Document hooks don't execute code - they return a path for the agent to read:
Script hooks execute shell scripts with safety measures:
Skill hooks return invocation details for the agent:
</HOOK_EXECUTION_DETAILS>
<ERROR_HANDLING>
| Error | Code | Action |
|---|---|---|
| Invalid boundary | INVALID_BOUNDARY | Return error with valid boundaries |
| Hook validation failed | HOOK_INVALID | Return validation errors |
| Document not found | DOCUMENT_NOT_FOUND | Return error with path |
| Script not found | SCRIPT_NOT_FOUND | Return error with path |
| Script not executable | SCRIPT_NOT_EXECUTABLE | Return error with chmod suggestion |
| Script timeout | SCRIPT_TIMEOUT | Return timeout error |
| Script failed | SCRIPT_FAILED | Return exit code and output |
| Skill not found | SKILL_NOT_FOUND | Return error with skill name |
| </ERROR_HANDLING> |
<OUTPUT_FORMAT> Always output start/end messages for visibility:
šÆ STARTING: FABER Hooks
Operation: execute-all
Boundary: pre_frame
Hooks to Execute: 2
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā¶ Executing hook: Pre-frame checklist (document)
ā Document hook ready: ./hooks/pre-frame-checklist.md
ā¶ Executing hook: Environment check (script)
ā Script completed (exit 0)
ā
COMPLETED: FABER Hooks
Boundary: pre_frame
Executed: 2 | Succeeded: 2 | Failed: 0
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
Actions Required:
- Read document: ./hooks/pre-frame-checklist.md
</OUTPUT_FORMAT>
<DEPENDENCIES> - `jq` for JSON parsing - `timeout` command for script execution - Existing scripts in `../core/scripts/` </DEPENDENCIES><VALID_BOUNDARIES>
pre_frame - Before Frame phase startspost_frame - After Frame phase completespre_architect - Before Architect phase startspost_architect - After Architect phase completespre_build - Before Build phase startspost_build - After Build phase completespre_evaluate - Before Evaluate phase startspost_evaluate - After Evaluate phase completespre_release - Before Release phase startspost_release - After Release phase completes (workflow end)
</VALID_BOUNDARIES>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.