CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

contacts-framework

Read, create, update, and pick contacts using the Contacts and ContactsUI frameworks. Use when fetching contact data, saving new contacts, wrapping CNContactPickerViewController in SwiftUI, handling contact permissions, or working with CNContactStore fetch and save requests.

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

85%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.

A well-structured reference skill: invariants-first body with executable snippets, explicit validation boundaries and failure-recovery loops for destructive saves, and clean offloading of extended SwiftUI/picker/vCard patterns to a single well-signaled reference file. The main improvement opportunities are a code example for update/delete and trimming the overlap between the invariants, Common Mistakes, and Review Checklist sections.

Suggestions

Add a short executable Swift example for the update/delete path (fetch with required keys → mutableCopy() → CNSaveRequest.update/delete → execute), since only create and fetch have code.

Consolidate the overlap where 'Common Mistakes' and 'Review Checklist' restate the fetch and mutation invariants verbatim, e.g., by keeping mistakes as one-line cross-references or merging the two sections.

Mention 'address book' and 'vCard' as trigger synonyms in the description to broaden natural matching (vCard import/export is already covered in the body but not surfaced in the description).

DimensionReasoningScore

Conciseness

The body is lean and assumption-respecting — it never explains what the Contacts framework is, and every section carries iOS-specific gotchas (NSContactsUsageDescription termination, the notes entitlement, CNContactPropertyNotFetchedException). Not 5 because "Common Mistakes" and "Review Checklist" restate earlier invariants (e.g., key fetching, pre-execute state changes), which could be consolidated.

4 / 5

Actionability

Contains copy-paste-ready fetch (CNContactFetchRequest with key descriptors) and create (CNSaveRequest.add) examples, plus a need→API decision table and named APIs for predicate and identifier queries. Not 5 because the update/delete path — a common case — is described in prose ("fetching the required properties, creating mutableCopy()...") without a code example, and snippets assume an existing store.

4 / 5

Workflow Clarity

The mutation workflow is explicitly sequenced (fetch → mutableCopy → fresh CNSaveRequest → execute) with a defined success boundary ("store.execute(request) returning without throwing is the success boundary"), a failure-recovery feedback loop ("preserve the user's intent, surface the error, correct known... causes, refetch stale contacts... construct a new request"), and a per-authorization-state behavior table plus a review checklist. Validation for the destructive save path is explicit, so the destructive-operation cap does not apply.

5 / 5

Progressive Disclosure

SKILL.md is a concise overview that clearly signals its single one-level-deep reference twice — "Read [Contacts extended patterns](references/contacts-patterns.md) for a complete observable manager, SwiftUI lists, single/multi-select picker wrappers..." — with an enumerated scope that matches the actual file contents (verified), plus a curated external-docs list. Not 4 because there are no organization gaps: the split is appropriate and navigation is easy.

5 / 5

Total

18

/

20

Passed

Description

92%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.

A strong description: third-person voice, concrete verb list, and an explicit multi-trigger 'Use when' clause covering permissions, picker integration, and store requests. The only gap is a few natural synonyms (address book, vCard) that would broaden trigger matching.

DimensionReasoningScore

Specificity

"Read, create, update, and pick contacts using the Contacts and ContactsUI frameworks" lists four concrete actions covering the domain's core operations, matching the comprehensive multi-action anchor. Not 4 because coverage of the framework's capability surface (fetch, mutate, pick) is complete rather than having minor gaps.

5 / 5

Completeness

Explicitly answers both: what ("Read, create, update, and pick contacts using the Contacts and ContactsUI frameworks") and when ("Use when fetching contact data, saving new contacts, wrapping CNContactPickerViewController in SwiftUI, handling contact permissions, or working with CNContactStore fetch and save requests") with concrete trigger phrases. Not 4 because the 'when' clause is fully explicit and enumerated, not merely adequate.

5 / 5

Trigger Term Quality

Includes natural phrases users would say — "fetching contact data", "saving new contacts", "handling contact permissions" — plus specific API triggers like CNContactPickerViewController and CNContactStore. Not 5 because common synonyms such as "address book", "contact list", or "vCard" are absent.

4 / 5

Distinctiveness Conflict Risk

Clear niche (Apple Contacts/ContactsUI) with distinct triggers — CNContactPickerViewController, CNContactStore, SwiftUI picker wrapping — making it unlikely to fire for unrelated skills. Not 4 because overlap risk is minimal, not just reduced.

5 / 5

Total

19

/

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/contacts-framework/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.