Install
$ agentstack add skill-yintzuyuan-glyphs-reference-glyphs-objc-headers ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
GlyphsCore Obj-C Headers Skill
Query 174 Objective-C header files from the GlyphsCore framework to find class APIs, protocol methods, properties, enums, and constants. This skill is the authoritative surface for the Objective-C side of the Glyphs API — Python wrappers ultimately bridge through these declarations.
Headers Path
${GLYPHS_APP_HEADERS_PATH:-/Applications/Glyphs 3.app/Contents/Frameworks/GlyphsCore.framework/Versions/A/Headers}
If the env var is not set, use the default path above. The path resolves to the installed Glyphs 3 application bundle; the skill works without a separate GlyphsSDK checkout for this domain.
When to use this skill versus the Python skill
| Question | Use | |---|---| | "What properties does GSFont expose in Python?" | glyphs-python-api | | "What's the Obj-C selector for GSFont.familyName?" | This skill | | "What protocol methods can a Filter plugin implement?" | This skill (GlyphsFilterProtocol.h) | | "What does _LightTableInterface look like at runtime?" | This skill + glyphs-light-table (cross-ref) | | "What enum cases exist for GSFontMaster axes?" | This skill (header typedef enum) |
Quick Start Patterns
# Find a class definition
Grep "@interface GSFont" path/to/Headers/
# Find all properties of a class
Grep "@property" path/to/Headers/GSFont.h
# Find a protocol and its methods
Read path/to/Headers/GlyphsReporterProtocol.h
# Search for an enum or constant
Grep "typedef.*enum" path/to/Headers/ --glob "*.h"
# Find which header declares a method
Grep "drawForegroundForLayer" path/to/Headers/
Protocol Files
Glyphs plugin protocols follow a consistent naming convention:
| Pattern | Example | |---------|---------| | Glyphs*Protocol.h | GlyphsReporterProtocol.h, GlyphsFilterProtocol.h | | GS*Protocol.h | GSAppDelegateProtocol.h, GSContentProtocol.h |
To list all protocols:
Glob path/to/Headers/*Protocol*.h
Advanced Search
# Find subclass relationships
Grep "@interface GS\\w+ : " path/to/Headers/
# Find all extern constants
Grep "^extern" path/to/Headers/
# Find category extensions for a class (e.g., GSLayer+*)
Glob path/to/Headers/GSLayer+*.h
# Find delegate/notification patterns
Grep "Notification\|Delegate" path/to/Headers/
Worked workflow — "Find every protocol method a Reporter plugin can implement"
# 1. Locate the protocol file
Read path/to/Headers/GlyphsReporterProtocol.h
# 2. Filter for @optional vs @required sections
Grep -n "@optional\|@required\|^- " path/to/Headers/GlyphsReporterProtocol.h
# 3. Cross-check with the SDK skill's method classification
# (glyphs-sdk-reference will categorize protocol/python_helper/python_wrapped)
This is the canonical pattern for plugin development: header for the contract, then SDK skill for the Python lifecycle wrapper.
Worked workflow — "What's the Obj-C type behind GSLayer.paths?"
# 1. Find the @property declaration
Grep "@property.*paths" path/to/Headers/GSLayer.h
# 2. If the property type is NSArray, find the element type
Grep "@interface GSPath" path/to/Headers/
# 3. Check category extensions for additional methods on the array
Glob path/to/Headers/GSLayer+Path*.h
The header tells you the actual class names and method signatures the Python wrapper hides.
Glyphs-Specific Notes
Conditional Compilation Guards
About 26 headers contain #ifndef GLYPHS_LITE or #ifndef LIBCORE guards. Code inside these guards is only available in the full Glyphs 3, not in Glyphs Mini or the core library.
# Find guarded sections in a header
Grep "GLYPHS_LITE\|LIBCORE" path/to/Headers/GSFont.h
When reading a header with these guards, note which APIs are full-version only. This is the most common source of "the Python wrapper has this attribute but I can't find it in the header" confusion.
Class Categories (Extensions)
Many core classes have functionality split across multiple headers:
GSFont.h+GSFont+GenerateGlyphs.h+GSFont+SerialImport.h+GSFont+SerialSave.hGSLayer.h+GSLayer+PathOperations.h+GSLayer+Autohinting.h+ ...GSGlyph.h+GSGlyph+MetricsKeys.h+GSGlyph+TrueTypeCurves.h
Always check for ClassName+*.h extensions when querying a class API. A missing method in the main header is almost always in a category file.
Selector ↔ Python method mapping
Glyphs' Python bridge follows PyObjC conventions:
| Obj-C selector | Python method | |---|---| | nameForKey: | nameForKey_("X") | | font:loadFromPath:options: | font_loadFromPath_options_(f, p, o) | | setLayer:forKey: | setLayer_forKey_(layer, key) |
Each : becomes _. Trailing colon stays. For zero-argument selectors (init, mainFont), no underscore is added.
Third-party Plugin APIs (Runtime Only)
Some third-party plugins expose Objective-C classes accessible via runtime introspection (NSClassFromString, objc_getClass), even without header files.
- Light Table (Git version control): Exposes
LightTableInterface,LightTableSignature,LightTableCommit,LightTableRecord,LightTableVersion,LightTableRestorationInfo. See theglyphs-light-tableskill for selector mappings and usage.
Common edge cases
- Header path missing → confirm Glyphs 3 is installed at
/Applications/Glyphs 3.app; for a non-standard install setGLYPHS_APP_HEADERS_PATH. - Property appears in Python but not in
.h→ check category headers (ClassName+*.h) andGLYPHS_LITEguards before concluding it's runtime-only. - Method has no matching protocol → it may be on a private subclass (no
Protocol.hdeclaration). Search the class header directly. - Multiple
@interfaceblocks for one class → categories add to the base class; merge all matches before answering.
Cross-skill collaboration
| Question | Use this skill | Use instead | Reason | |---|---|---|---| | "What Obj-C properties does GSFont have?" | ✅ | — | This is the headers' job | | "What Python attributes does GSFont have?" | — | glyphs-python-api | Wrapper surface differs | | "What's the plugin lifecycle protocol signature?" | ✅ | — | Headers define the contract | | "How do I implement a Reporter plugin?" | — | glyphs-sdk-reference | Lifecycle + template | | "What's the runtime class of _LightTableInterface?" | partial | glyphs-light-table | Third-party plugin surface | | "What's a GSFormatVersion3 value?" | — | glyphs-python-api (constants) | Constant lookups are easier in Python skill |
Reference
See [references/header-categories.md](references/header-categories.md) for a categorized guide to the 174 headers.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: yintzuyuan
- Source: yintzuyuan/glyphs-reference
- License: MIT
- Homepage: http://erikyin.net/glyphs-reference/
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.