callkit — Claude Code skill: VoIP calls with CallKit
Teaches an agent to build VoIP calling into an iOS app: the system call screen, PushKit registration, audio sessions, and a caller ID extension.
npx skills add dpearson2699/swift-ios-skills --skill callkit -a claude-codeWhat callkit does
This skill covers VoIP calls that surface in the iOS call screen rather than a hand-built one. It goes through the provider and call controller objects, both call directions, registering for VoIP pushes with PushKit, tying the audio session to call actions, and a Call Directory extension for caller ID and number blocking.
Sections follow the work order: project capabilities, provider configuration, incoming and outgoing flows, push registration, audio, the directory extension. Samples are Swift and assume one shared CXProvider kept alive for the app's lifetime. A table for iOS 26.4+ explains PKVoIPPushMetadata.mustReport: a true value means the call has to be announced before the push handler returns, a false value means no announcement is needed. There is also a common-mistakes section and a review checklist.
Three project settings come first: the Voice over IP background mode, the Push Notifications capability, and a separate Call Directory Extension target if blocking is planned. Skipping the announcement of a required call gets the app terminated, and repeated misses can cut off VoIP push delivery.
What it helps with
- show an incoming VoIP call in the native call screen
- register for VoIP pushes and pass the token to your server
- place an outgoing call through the call controller
- tie the audio session to answer and end actions
- label callers and block numbers with a directory extension
Example prompts for the agent
- Set up VoIP push registration with
PKPushRegistryand send the token to my backend. - Walk me through reporting an incoming call, then fulfil
CXAnswerCallActiononce the server connection is up. - Check my
CXProviderDelegateagainst the common mistakes section.
How to install callkit
1Skills CLI (Vercel)
npx skills add dpearson2699/swift-ios-skills --skill callkit -a claude-code2Manually: put the files in place
~/.claude/skills/callkit/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/callkit/
1Skills CLI (Vercel)
npx skills add dpearson2699/swift-ios-skills --skill callkit -a codex2Manually: put the files in place
.agents/skills/callkit/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add dpearson2699/swift-ios-skills --skill callkit -a cursor2Manually: put the files in place
.cursor/skills/callkit/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install dpearson2699/swift-ios-skills callkit2Manually: put the files in place
.github/skills/callkit/SKILL.md1Skills CLI (Vercel)
npx skills add dpearson2699/swift-ios-skills --skill callkit -a gemini-cli2Platform CLI
gemini skills install https://github.com/dpearson2699/swift-ios-skills --path skills/callkitManually: put the files in place
.devin/skills/callkit/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add dpearson2699/swift-ios-skills --skill callkit -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about callkit
How do I install callkit in Claude Code?
Run npx skills add dpearson2699/swift-ios-skills --skill callkit -a claude-code; the skill file lands at ~/.claude/skills/callkit/SKILL.md.
What does callkit do?
It guides an agent through CallKit and PushKit code for an iOS app: the provider, the call controller, handling user actions, audio, and a directory extension for caller ID and blocking.
What happens if I don't report an incoming call before the push handler returns?
The system terminates the app. Repeated misses may also stop VoIP pushes from being delivered.