From apple-notes-pack
Automates Apple Notes via osascript in GitHub Actions macOS CI runners. Guides on mocking for permission limits with TypeScript examples.
npx claudepluginhub jeremylongshore/claude-code-plugins-plus-skills --plugin apple-notes-packThis skill is limited to using the following tools:
Apple Notes automation requires macOS — use GitHub Actions macOS runners.
Sets up hot-reload workflow for JXA scripts automating Apple Notes on macOS, with chokidar file watching, osascript runner, and test helpers for note CRUD.
Manages Apple Notes on macOS via memo CLI: create, view, edit, delete, search, move, export notes. For terminal-based note CRUD and organization.
Manages Apple Notes on macOS via memo CLI: create, view, edit, delete, search, move notes between folders, and export to HTML/Markdown. Useful for terminal-based note operations.
Share bugs, ideas, or general feedback.
Apple Notes automation requires macOS — use GitHub Actions macOS runners.
name: Notes Automation Tests
on: [push]
jobs:
test:
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: "20" }
- run: npm ci
- name: Test Notes access
run: |
# macOS CI runners have Notes.app but limited permissions
osascript -l JavaScript -e "typeof Application(\"Notes\")" || echo "Notes not available in CI"
- name: Run unit tests (mocked)
run: npm test
macOS CI runners (GitHub Actions) have restricted Apple Events permissions. Real Notes.app automation tests must run on local macOS machines. Use mocked clients in CI.
// tests/mocks/notes-client.mock.ts
export class MockAppleNotesClient {
private notes: Array<{ id: string; title: string; body: string }> = [];
createNote(title: string, body: string): string {
const id = `note-${Date.now()}`;
this.notes.push({ id, title, body });
return id;
}
listNotes() { return this.notes; }
searchNotes(q: string) { return this.notes.filter(n => n.title.includes(q)); }
}