| description | allowed-tools | |||
|---|---|---|---|---|
Trash all unstarred gammas on the current dashboard page using browser automation. Use when asked to "clean up gammas", "trash unstarred", "delete unstarred gammas", or "clean dashboard". |
|
| name | description | args |
|---|---|---|
gif-edit |
Edit GIF files with gifsicle for PR demos. Replicate frames, delete frames, adjust timing, set looping, and more. Use when asked to "edit a gif", "slow down a gif", "hold on a frame", "fix gif timing", or optimize recorded demo GIFs. |
(optional) path to GIF file and/or editing instructions |
Edit GIF files using gifsicle for polishing PR demo recordings.
| name | description |
|---|---|
demo-gif |
Record concise demo GIFs for feature branches using browser automation. Use when asked to "record a demo", "make a gif", "capture the feature", "show the PR in action", or demonstrate UI changes for pull requests. |
Record browser interactions as GIF for PR demos using chrome-devtools MCP.
Claude Code likes to gh pr edit PRs without reading the current state first — overwriting descriptions, losing context, or making changes based on stale assumptions. This hook pair forces a "read before write" pattern: any gh pr edit is blocked unless gh pr view was called first for that PR in the same session.
Two hooks — a PostToolUse hook records when Claude views a PR, and a PreToolUse hook blocks edits unless a view was recorded. The view is consumed after each edit, so consecutive edits each require a fresh read.
gh pr view 123 ... → records "123" to a temp file
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| date = Date.new(2011, 6, 9) | |
| date.stamp("March 1, 1999") #=> "June 9, 2011" | |
| date.stamp("Jan 1, 1999") #=> "Jun 9, 2011" | |
| date.stamp("Jan 01") #=> "Jun 09" | |
| date.stamp("Sunday, May 1, 2000") #=> "Thursday, June 9, 2011" | |
| date.stamp("Sun Aug 5") #=> "Thu Jun 9" | |
| date.stamp("12/31/99") #=> "06/09/11" | |
| date.stamp("DOB: 12/31/2000") #=> "DOB: 06/09/2011" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # add leading zeros to a number | |
| def zero_pad(target_length, input_string) | |
| pad_length = target_length - input_string.length | |
| "0" * pad_length + input | |
| end | |
| # convert a number to binary |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # Remove comments, whitespace, newlines, and returns | |
| # Use line.gsub! to modify the actual line instead of just returning the result | |
| @input = line.gsub(/\t|\s|\n|\r|\/{2}.*$/, '') | |
| # Then, once all of the crap is gone make sure to skip empty lines | |
| if(!@input.empty?) |