用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/ComeOnOliver/skillshub --skill apple-notes-ci-integration命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
Review product and feature risk before an AI coding agent starts implementation.
Use Xquik for X data and confirmation-gated X actions: tweet search, user lookup, follower export, media download, monitors, webhooks, MCP, and SDK workflows.
Canton Network open-source ecosystem guide covering DAML SDK, Canton runtime, and Splice applications. Use when working with Canton Network, DAML smart contracts, or building decentralized applications.
基于 SOC 职业分类
正在显示 SKILL.md
| name | apple-notes-ci-integration |
| description | Run Apple Notes automation in CI on macOS runners. Trigger: "apple notes CI". |
| allowed-tools | Read, Write, Edit, Bash(osascript:*), Grep |
| version | 1.0.0 |
| license | MIT |
| author | Jeremy Longshore <jeremy@intentsolutions.io> |
| tags | ["saas","macos","apple-notes","automation"] |
| compatible-with | claude-code |
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)); }
}