/axiom-location
Use when implementing location services, maps, geofencing, or debugging location/MapKit issues. Covers Core Location, CLMonitor, MapKit, annotations, directions.
$ npx -y skills add charleswiltgen/axiom --skill axiom-location --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/axiom-location
Context preview
The summary Claude sees to decide when to auto-load this skill.
Use when implementing location services, maps, geofencing, or debugging location/MapKit issues. Covers Core Location, CLMonitor, MapKit, annotations, directions.
SKILL.md
axiom-location.SKILL.mdname: axiom-location
description: Use when implementing location services, maps, geofencing, or debugging location/MapKit issues. Covers Core Location, CLMonitor, MapKit, annotations, directions.
license: MIT
Location & Maps
**You MUST use this skill for ANY location services, mapping, geofencing, or Core Location / MapKit work.**
Quick Reference
| Symptom / Task | Reference | |----------------|-----------| | Authorization strategy (When In Use vs Always) | See `skills/core-location.md` | | Monitoring approach (continuous, significant-change, CLMonitor) | See `skills/core-location.md` | | Accuracy selection, background location | See `skills/core-location.md` | | CLLocationUpdate, CLMonitor, CLServiceSession APIs | See `skills/core-location-ref.md` | | Authorization API patterns, geofencing API | See `skills/core-location-ref.md` | | Compass heading, heading reference body (`headingBody`) | See `skills/core-location-ref.md` (Part 12) | | Location updates never arrive | See `skills/core-location-diag.md` | | Background location stops working | See `skills/core-location-diag.md` | | Authorization always denied, geofence failures | See `skills/core-location-diag.md` | | SwiftUI Map, annotations, markers, clustering | See `skills/mapkit.md` | | MKMapView vs SwiftUI Map decision | See `skills/mapkit.md` | | Search, directions, routing | See `skills/mapkit.md` | | MapKit API: Marker, Annotation, MKLocalSearch, MKDirections | See `skills/mapkit-ref.md` | | Look Around, MKMapSnapshotter, MKMapItem | See `skills/mapkit-ref.md` | | Annotations not appearing, region jumping | See `skills/mapkit-diag.md` | | Clustering not working, search failures | See `skills/mapkit-diag.md` | | Overlay rendering, user location not showing | See `skills/mapkit-diag.md` |
Decision Tree
digraph location {
start [label="Location / Maps task" shape=ellipse];
domain [label="Core Location or MapKit?" shape=diamond];
cl_type [label="Need what?" shape=diamond];
mk_type [label="Need what?" shape=diamond];
start -> domain;
domain -> cl_type [label="Core Location"];
domain -> mk_type [label="MapKit / Maps"];
cl_type -> "skills/core-location.md" [label="authorization, monitoring\nstrategy, accuracy,\nbackground location"];
cl_type -> "skills/core-location-ref.md" [label="API syntax\n(CLLocationUpdate,\nCLMonitor, CLServiceSession)"];
cl_type -> "skills/core-location-diag.md" [label="something broken\n(no updates, denied,\ngeofence not firing)"];
mk_type -> "skills/mapkit.md" [label="patterns, decisions\n(SwiftUI Map vs MKMapView,\nannotations, search)"];
mk_type -> "skills/mapkit-ref.md" [label="API syntax\n(Marker, Annotation,\nMKLocalSearch, MKDirections)"];
mk_type -> "skills/mapkit-diag.md" [label="something broken\n(annotations missing,\nregion jumping, clustering)"];
}1. Authorization strategy, monitoring approach, accuracy? → `skills/core-location.md` 1a. Need specific API syntax (CLLocationUpdate, CLMonitor, CLServiceSession)? → `skills/core-location-ref.md` 1b. Location not working? → `skills/core-location-diag.md` 2. Adding a map, annotations, search, directions? → `skills/mapkit.md` 2a. Need specific MapKit API syntax (Marker, MKLocalSearch, MKDirections)? → `skills/mapkit-ref.md` 2b. Map display broken? → `skills/mapkit-diag.md` 3. Location draining battery? → See axiom-performance (skills/energy.md) 4. Background task scheduling for location? → See axiom-integration 5. Privacy manifest for location? → See axiom-integration
Conflict Resolution
**location vs axiom-performance**: When location is draining battery: 1. **Try location FIRST** — Excessive accuracy or continuous updates are the #1 cause. `skills/core-location.md` covers accuracy selection and monitoring strategy. 2. **Only use axiom-performance** if location settings are already correct — Profile after ruling out obvious over-tracking.
**location vs axiom-integration**: When implementing background location:
- Background location configuration (Info.plist, capabilities, CLServiceSession) → **use location**
- BGTaskScheduler for periodic location processing → **use axiom-integration**
**location vs axiom-data**: When storing or syncing location data:
- Getting location updates, geofencing → **use location**
- Persisting location history, CloudKit sync → **use axiom-data**
**location vs axiom-build**: When location permissions fail in simulator:
- Authorization dialogs, Info.plist keys → **use location** (`skills/core-location-diag.md`)
- Simulator GPS simulation, `simctl location` → **use axiom-build**
Critical Patterns
**Core Location** (`skills/core-location.md`):
- Authorization escalation strategy (When In Use first, Always later)
- Monitoring decision tree (continuous vs significant-change vs CLMonitor)
- Accuracy selection with battery impact
- Background location configuration
- Anti-patterns with time costs (premature Always authorization, unnecessary continuous updates)
**Core Location API** (`skills/core-location-ref.md`):
- CLLocationUpdate AsyncSequence (iOS 17+)
- CLMonitor condition-based geofencing (iOS 17+)
- CLServiceSession declarative authorization (iOS 18+)
- Authorization API patterns, background mode configuration
**Core Location Diagnostics** (`skills/core-location-diag.md`):
- Location updates never arrive
- Background location stops working
- Authorization always denied
- Geofence events not triggering
- Location accuracy unexpectedly poor
**MapKit** (`skills/mapkit.md`):
- SwiftUI Map vs MKMapView decision tree
- Annotation patterns (Marker, custom Annotation)
- Search (MKLocalSearch, autocomplete)
- Directions and routing
- Anti-patterns (annotations in view body, no view reuse, setRegion loops)
**MapKit API** (`skills/mapkit-ref.md`):
- SwiftUI Map API (MapCameraPosition, content builders, controls)
- MKMapView delegate patterns
- MKLocalSearch, MKDirections
- Look Around, MKMapSnapshotter
- Clustering configuration
**Ma
Read more
name: axiom-location description: Use when implementing location services, maps, geofencing, or debugging location/MapKit issues. Covers Core Location, CLMonitor, MapKit, annotations, directions. license: MIT
Location & Maps
**You MUST use this skill for ANY location services, mapping, geofencing, or Core Location / MapKit work.**
Quick Reference
| Symptom / Task | Reference | |----------------|-----------| | Authorization strategy (When In Use vs Always) | See `skills/core-location.md` | | Monitoring approach (continuous, significant-change, CLMonitor) | See `skills/core-location.md` | | Accuracy selection, background location | See `skills/core-location.md` | | CLLocationUpdate, CLMonitor, CLServiceSession APIs | See `skills/core-location-ref.md` | | Authorization API patterns, geofencing API | See `skills/core-location-ref.md` | | Compass heading, heading reference body (`headingBody`) | See `skills/core-location-ref.md` (Part 12) | | Location updates never arrive | See `skills/core-location-diag.md` | | Background location stops working | See `skills/core-location-diag.md` | | Authorization always denied, geofence failures | See `skills/core-location-diag.md` | | SwiftUI Map, annotations, markers, clustering | See `skills/mapkit.md` | | MKMapView vs SwiftUI Map decision | See `skills/mapkit.md` | | Search, directions, routing | See `skills/mapkit.md` | | MapKit API: Marker, Annotation, MKLocalSearch, MKDirections | See `skills/mapkit-ref.md` | | Look Around, MKMapSnapshotter, MKMapItem | See `skills/mapkit-ref.md` | | Annotations not appearing, region jumping | See `skills/mapkit-diag.md` | | Clustering not working, search failures | See `skills/mapkit-diag.md` | | Overlay rendering, user location not showing | See `skills/mapkit-diag.md` |
Decision Tree
digraph location {
start [label="Location / Maps task" shape=ellipse];
domain [label="Core Location or MapKit?" shape=diamond];
cl_type [label="Need what?" shape=diamond];
mk_type [label="Need what?" shape=diamond];
start -> domain;
domain -> cl_type [label="Core Location"];
domain -> mk_type [label="MapKit / Maps"];
cl_type -> "skills/core-location.md" [label="authorization, monitoring\nstrategy, accuracy,\nbackground location"];
cl_type -> "skills/core-location-ref.md" [label="API syntax\n(CLLocationUpdate,\nCLMonitor, CLServiceSession)"];
cl_type -> "skills/core-location-diag.md" [label="something broken\n(no updates, denied,\ngeofence not firing)"];
mk_type -> "skills/mapkit.md" [label="patterns, decisions\n(SwiftUI Map vs MKMapView,\nannotations, search)"];
mk_type -> "skills/mapkit-ref.md" [label="API syntax\n(Marker, Annotation,\nMKLocalSearch, MKDirections)"];
mk_type -> "skills/mapkit-diag.md" [label="something broken\n(annotations missing,\nregion jumping, clustering)"];
}1. Authorization strategy, monitoring approach, accuracy? → `skills/core-location.md` 1a. Need specific API syntax (CLLocationUpdate, CLMonitor, CLServiceSession)? → `skills/core-location-ref.md` 1b. Location not working? → `skills/core-location-diag.md` 2. Adding a map, annotations, search, directions? → `skills/mapkit.md` 2a. Need specific MapKit API syntax (Marker, MKLocalSearch, MKDirections)? → `skills/mapkit-ref.md` 2b. Map display broken? → `skills/mapkit-diag.md` 3. Location draining battery? → See axiom-performance (skills/energy.md) 4. Background task scheduling for location? → See axiom-integration 5. Privacy manifest for location? → See axiom-integration
Conflict Resolution
**location vs axiom-performance**: When location is draining battery: 1. **Try location FIRST** — Excessive accuracy or continuous updates are the #1 cause. `skills/core-location.md` covers accuracy selection and monitoring strategy. 2. **Only use axiom-performance** if location settings are already correct — Profile after ruling out obvious over-tracking.
**location vs axiom-integration**: When implementing background location:
- Background location configuration (Info.plist, capabilities, CLServiceSession) → **use location**
- BGTaskScheduler for periodic location processing → **use axiom-integration**
**location vs axiom-data**: When storing or syncing location data:
- Getting location updates, geofencing → **use location**
- Persisting location history, CloudKit sync → **use axiom-data**
**location vs axiom-build**: When location permissions fail in simulator:
- Authorization dialogs, Info.plist keys → **use location** (`skills/core-location-diag.md`)
- Simulator GPS simulation, `simctl location` → **use axiom-build**
Critical Patterns
**Core Location** (`skills/core-location.md`):
- Authorization escalation strategy (When In Use first, Always later)
- Monitoring decision tree (continuous vs significant-change vs CLMonitor)
- Accuracy selection with battery impact
- Background location configuration
- Anti-patterns with time costs (premature Always authorization, unnecessary continuous updates)
**Core Location API** (`skills/core-location-ref.md`):
- CLLocationUpdate AsyncSequence (iOS 17+)
- CLMonitor condition-based geofencing (iOS 17+)
- CLServiceSession declarative authorization (iOS 18+)
- Authorization API patterns, background mode configuration
**Core Location Diagnostics** (`skills/core-location-diag.md`):
- Location updates never arrive
- Background location stops working
- Authorization always denied
- Geofence events not triggering
- Location accuracy unexpectedly poor
**MapKit** (`skills/mapkit.md`):
- SwiftUI Map vs MKMapView decision tree
- Annotation patterns (Marker, custom Annotation)
- Search (MKLocalSearch, autocomplete)
- Directions and routing
- Anti-patterns (annotations in view body, no view reuse, setRegion loops)
**MapKit API** (`skills/mapkit-ref.md`):
- SwiftUI Map API (MapCameraPosition, content builders, controls)
- MKMapView delegate patterns
- MKLocalSearch, MKDirections
- Look Around, MKMapSnapshotter
- Clustering configuration
**Ma
Battle-tested skills, agents, and tools for modern Apple OS development — Swift 6, SwiftUI, Liquid Glass, Apple Intelligence, and more. Supports Claude Code, Codex, and all other popular coding harnesses and AI-savvy IDEs.
Repo: charleswiltgen/axiom
Other skills on axiom.
- /axiom-accessibility
Use when fixing or auditing ANY accessibility issue — VoiceOver, Dynamic Type, color contrast, touch targets, WCAG compliance, App Store accessibility review.
Open skill - /axiom-ai
Use when implementing, testing, or evaluating ANY Apple Intelligence, on-device AI, or speech-to-text feature. Covers Foundation Models, @Generable, LanguageModelSession, Tool protocol, eval suites, model-as-judge scoring, SpeechTranscriber, CoreML.
Open skill - /axiom-analyze-crash
Use when the user has a crash log (.
Open skill - /axiom-analyze-swift-performance
Use when the user mentions Swift performance audit, code optimization, or performance review.
Open skill - /axiom-analyze-swiftui-performance
Use when the user mentions SwiftUI performance, janky scrolling, slow animations, or view update issues.
Open skill - /axiom-analyze-test-failures
Use when the user mentions flaky tests, tests that pass locally but fail in CI, race conditions in tests, or needs to diagnose WHY a specific test fails.
Open skill

