Skip to content

Instantly share code, notes, and snippets.

View peterhartree's full-sized avatar

Peter Hartree peterhartree

View GitHub Profile
@peterhartree
peterhartree / meeting-summary-prompt.md
Created January 21, 2026 15:35
Prompt for creating comprehensive, chronological meeting summaries

Meeting summary prompt

Create comprehensive, chronological summaries that help re-envision and remember the conversation. The chronological structure is key—it allows details not explicitly in the summary to be recalled by following the flow.

Document structure

# Meeting summary: [Title]

**Date:** YYYY-MM-DD
@peterhartree
peterhartree / tidy-transcript-prompt.md
Created January 21, 2026 15:35
Prompt for tidying raw meeting transcripts while preserving important nuances

Meeting transcript tidying prompt

Guidelines for cleaning up raw meeting transcripts while preserving important nuances.

Tidying guidelines

  • Remove filler words (um, uh, you know) and false starts
  • Fix obvious transcription errors and grammar
  • Keep speaker labels clear and consistent
  • Add section headings for major topic shifts
@peterhartree
peterhartree / blog-edit-skill.md
Created January 20, 2026 15:16
Blog editing skill for AI Wow posts - style and clarity guidelines
name description
blog-edit
Review AI Wow blog posts for style and clarity improvements. Checks for brevity, directness, unnecessary hedging, and maintains the author's informal, punchy style.

Blog Editing Skill

This skill reviews AI Wow blog posts for style and clarity improvements.

How to Use

@peterhartree
peterhartree / claude_launcher.py
Last active January 21, 2026 13:31
Claude Code project switcher - launch Claude in any project with single keypress
#!/usr/bin/env python3
"""Unified Claude Code launcher with project selection and recent directory tracking.
Displays:
- Current directory with Enter to continue
- Numbered/lettered list of projects from projects.yaml
- Numbered/lettered list of recent directories (excluding project dirs)
Options 1-9 use digits, options 10+ use letters (a-z).
All selections are instant (single keypress). Menu actions use Ctrl+key.
@peterhartree
peterhartree / index.ts
Created January 20, 2026 08:56
Claude Code bash safety hook - blocks destructive commands, prompts for dangerous patterns
#!/usr/bin/env bun
/**
* Unified bash safety hook for Claude Code.
* - Hard blocks destructive deletion commands (rm, shred, unlink, find -delete)
* - Asks permission for other dangerous patterns (RCE, exfiltration, persistence, etc.)
*
* Exit codes:
* - 0: Allow (or ask permission via JSON output)
* - 2: Hard block with message
*/
@peterhartree
peterhartree / its-ok-xero
Created July 25, 2023 22:37
Automate Xero reconcilliation
setInterval(() => {
let okayButtons = document.querySelectorAll('.okayButton');
okayButtons.forEach(button => {
if (getComputedStyle(button).display !== 'none') {
button.click();
}
});
}, 1000);
@peterhartree
peterhartree / gist:275c4bcddc8eb3fe563f5dbb59a27d68
Created May 24, 2020 11:23
Firefox hide pinned tab title change notification dot
@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); /* only needed once */
/* Completely hide the "title changed" notification dot on pinned tabs */
.tabbrowser-tab > .tab-stack > .tab-content[pinned][titlechanged] {
background-image: none !important;
}
@peterhartree
peterhartree / messages.json
Created February 10, 2018 10:11
Inbox When Ready l18n
{
"appName": {
"message": "Inbox When Ready for Gmail™",
"description": "The name of the application, displayed in the web store."
},
"appDesc": {
"message": "Protect your focus... improve your inbox workflow.",
"description": "The short description of the application, displayed in the web store."
},
"inbox": {
/**
* This Google Sheets script keeps data in the specified column sorted any time
* the data changes.
*
* After much research, there wasn't an easy way to automatically keep a column
* sorted in Google Sheets, and creating a second sheet to act as a "view" to
* my primary one in order to achieve that was not an option. Instead, I
* created a script that watches for when a cell is edited and triggers
* an auto sort.
*
var waitTime = 0;
var maximumWaitTime = 1000 * 5; // 5 seconds
waitForSleeknoteToLoad(waitTime, maximumWaitTime);
function waitForSleeknoteToLoad(waitTime, maximumWaitTime) {
if(typeof SleekNote !== 'undefined' && typeof SleekNote.triggerOnclick === 'function'){
$(document).trigger('SleeknoteLoaded');
}
else {
waitTime += 1000;