CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

callkit

Implement VoIP calling with CallKit and PushKit. Use when building incoming/outgoing call flows, registering for VoIP push notifications, configuring CXProvider and CXCallController, handling call actions, coordinating audio sessions, or creating Call Directory extensions for caller ID and call blocking.

Quality

91%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Passed

No findings from the security scan

SKILL.md
Quality
Evals
Security

Quality

Content

78%Weight 40%Scale 1-5

Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.

The body is a well-architected overview: lean, imperative sections with exact API signatures, an architecture diagram, a critical-rule warning, and exemplary task-based routing to a single verified reference file. Its main weaknesses are a redundant intro paragraph that duplicates the description, the absence of any inline copy-paste snippet for the critical incoming-call path, and no inline error-recovery loop.

Suggestions

Trim or remove the opening paragraph, which restates the frontmatter description nearly verbatim, and fold the Swift 6.4 / iOS 26+ target into a single line elsewhere.

Add a minimal inline Swift snippet (5-10 lines) for the critical VoIP-push → reportNewIncomingCall path so the most important pattern is executable without opening the reference file.

Include a brief error-recovery note for when the reportNewIncomingCall completion handler fails (e.g., retry or fail the action), completing the feedback loop that currently only exists in the reference file.

DimensionReasoningScore

Conciseness

Quotes: "Build VoIP calling experiences that integrate with the native iOS call UI using CallKit and PushKit. Covers incoming and outgoing call flows, PushKit VoIP registration, audio session coordination, and call directory extensions. Targets Swift 6.4 / iOS 26+." The body is largely lean and imperative ("Do not activate the AVAudioSession during call initialization. Only configure categories in advance"), but the opening paragraph restates the frontmatter description almost verbatim, and the key-types table plus version-specific notes ("Targets Swift 6.4 / iOS 26+", "On iOS 26.4+") include tokens that could be trimmed or relocated. Not 5: not every token earns its place (the duplicated intro); not 3: there are no filler sentences or explained background concepts — sections are dense with operative constraints.

4 / 5

Actionability

Quotes: "reportNewIncomingCall(with:update:completion:)", "pushRegistry(_:didReceiveIncomingPushWith:for:)", "`.playAndRecord` with `.voiceChat` mode", "reportOutgoingCall(with:startedConnectingAt:) and connectedAt:". The guidance is highly concrete with exact delegate signatures, audio modes, capability names, and handle types. Not 5: nothing in the body is copy-paste ready — even the single most critical path (reporting an incoming call from a VoIP push) defers to references/callkit-patterns.md rather than showing a short inline snippet. Not 3: the direction is specific and executable at the API level, not vague or pseudocode, and the routing to worked code is explicit.

4 / 5

Workflow Clarity

Quotes: the ASCII flow "[PushKit VoIP Push] ──> [reportNewIncomingCall] ──> [System Call UI] ... [CXAnswerCallAction]", the sequenced lifecycle "Activate the audio session **only** when the system invokes `provider(_:didActivate:)`. Deactivate audio in `provider(_:didDeactivate:)`", and the explicit "Review Checklist" of 9 checkpoints. Sequence and checklist are strong, and "Fulfill or fail every action" gives error-path direction. Not 5: there is no inline validate→fix→retry feedback loop (e.g., what to do when the reportNewIncomingCall completion handler errors) — that detail lives in the reference file. Not 3: checkpoints are present and explicit via the checklist, not merely implied.

4 / 5

Progressive Disclosure

Quotes: "For a complete, observable VoIP call manager... read [Full Call Manager](references/callkit-patterns.md#full-call-manager)", plus five more task-routed deep links, all verified to exist as headings in the single bundle file references/callkit-patterns.md (12.7 KB). This is a clear overview with well-signaled, one-level-deep references, a task-based routing table, a Contents list, and a References section — matching the anchor-5 structure exactly. No nested references or buried content; the bundle (one references file, no scripts/assets) is appropriately split.

5 / 5

Total

17

/

20

Passed

Description

100%Weight 40%Scale 1-5

Based on the skill's description, can an agent find and select it at the right time? Clear, specific descriptions lead to better discovery.

The description exemplifies the anchor-5 pattern: a crisp third-person statement of capability followed by an explicit 'Use when' clause enumerating concrete, natural trigger scenarios. It is comprehensive, specific, and highly distinctive with no fluff or over-claims.

DimensionReasoningScore

Specificity

Quotes: "building incoming/outgoing call flows, registering for VoIP push notifications, configuring CXProvider and CXCallController, handling call actions, coordinating audio sessions, or creating Call Directory extensions for caller ID and call blocking." This lists seven-plus specific concrete actions spanning the entire CallKit domain, matching the anchor-5 example's comprehensiveness ("Extract text and tables from PDF files, fill forms, merge documents, convert pages to images"). Not 4: there are no minor gaps — the actions cover core flows, push registration, provider configuration, action handling, audio, and call directory extensions.

5 / 5

Completeness

Quotes: what — "Implement VoIP calling with CallKit and PushKit"; when — "Use when building incoming/outgoing call flows, registering for VoIP push notifications, configuring CXProvider and CXCallController...". Both 'what' and 'when' are explicit, with the 'when' clause enumerating concrete trigger scenarios, mirroring the anchor-5 good example structure almost exactly. Not 4: the 'when' is not merely present but highly specific with multiple trigger phrases.

5 / 5

Trigger Term Quality

Quotes: "VoIP calling", "incoming/outgoing call flows", "VoIP push notifications", "caller ID and call blocking", "audio sessions". These are exactly the natural phrases an iOS developer would use when needing this skill, alongside the API-level terms (CXProvider, CXCallController, Call Directory). Not 4: unlike the anchor-4 example ("a few natural terms missing"), the synonyms here are comprehensive — VoIP push, incoming/outgoing calls, caller ID, call blocking, call actions all appear; file extensions are inapplicable in this domain.

5 / 5

Distinctiveness Conflict Risk

Quotes: "CallKit and PushKit", "CXProvider and CXCallController", "Call Directory extensions for caller ID and call blocking". This is a clearly delineated niche (iOS native VoIP calling integration) with distinctive technical triggers; virtually no other skill would match these terms. Not 4: there is no meaningful overlap risk even with closely related skills — the framework names are unambiguous.

5 / 5

Total

20

/

20

Passed

Validation

100%

Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.

Validation — 16 / 16 Passed

Validation for skill structure

No warnings or errors.

Repository

thienqo/ios-skills

Path

skills/callkit/SKILL.md

Reviewed

Table of Contents

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.