alter
Inspect and safely change Alter, the native macOS AI assistant from alterhq.com, without going through its GUI.
Skill by vanducng
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/vanducng-alter
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: documents, data, security, writing
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md and code. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Python package
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/alter- Your home directory (~)
What's inside
- Skill name
alter- Description
- Inspect and safely change Alter, the native macOS AI assistant from alterhq.com, without going through its GUI. Audit its global hotkeys, find and resolve collisions with launchers and capture tools, move an action off a chord, and document its app-data locations without reading private content. Use when the user mentions Alter, asks why an Alter shortcut stopped firing, wants to free a keyboard chord an Alter action is holding, or needs a macOS global hotkey conflict audit. Alter's meeting transcripts and conversation history are off limits to this skill.
- License
- MIT
- Metadata
- author: vanducng · version: 1.0.0 · bundle-id: com.wearedevx.alter
- Instructions
- 168 lines in SKILL.md · view on GitHub
Before installing
- Ships executable scripts
Agent Skills spec issues
- allowed-tools: must be a space-separated string
Files (2)
- SKILL.md
- hotkey-audit.py · scripts/
SKILL.md (first lines)
# Alter
Alter is a native macOS AI assistant: actions, dictation, meeting recording and
transcription, with local model support. Official docs are at
`https://docs.alterhq.com`. This skill uses the preferences file for narrowly
scoped hotkey work and the GUI for everything else.
## Privacy boundary, read this first
Alter records meetings and stores transcripts and conversation history locally.
Some of that content sits in the **same preferences plist as the hotkeys**, not
only in its databases.
Never dump the whole plist. A bare `defaults read com.wearedevx.alter` or a
broad `plutil -p` can splash an entire meeting transcript into the transcript of
your own session, including names and whatever the meeting was about.
- Read **named keys only**, never the whole domain.
- Never open `Alter.sqlite`, `Search.sqlite`, or anything under the transcripts
directory.
- Never quote, summarize, or store what you see if it leaks anyway. Say that it
leaked and move on.
- If the user wants transcript content, tell them to export it from the app.
This is the one hard rule in this skill. Everything below respects it.
## Where things live
| What | Path |
| --- | --- |
| Hotkeys and settings | `$HOME/Library/Preferences/com.wearedevx.alter.plist` |
| Actions, history, transcripts | `$HOME/Library/Application Support/Alter/` |
| Application | `/Applications/Alter.app` |
Hotkeys are the only part of that plist this skill touches.
## Hotkey encoding
Every binding is a JSON **string** under a `KeyboardShortcuts_<action>` key:
```json
{"access": "systemGlobal", "carbonKeyCode": 15, "carbonModifiers": 768}
```
- `access` is `systemGlobal` (fires anywhere) or `appLocal` (only while Alter is
focused). **Only `systemGlobal` can collide with other apps.**
- `carbonModifiers` is a bitmask: cmd 256, shift 512, opt 2048, ctrl 4096. So
768 is cmd+shift.
- `carbonKeyCode` is a Carbon virtual keycode, which is layout independent and
not ASCII. The letters are scattered: A 0, S 1, D 2, F 3, H 4, G 5, Z 6, X 7,
C 8, V 9, B 11, Q 12, W 13, E 14, R 15, Y 16, T 17, O 31, U 32, I 34, P 35,
L 37, J 38, K 40, N 45, M 46, Space 49.
Custom actions use a key of the form
`KeyboardShortcuts_user_action_<action-uuid>`. The UUID maps to a record inside
Alter's database, which is off limits, so you cannot name the action from the
plist alone. **Ask the user what an action does rather than going to look.**
## Audit hotkeys
`scripts/hotkey-audit.py` reads hotkey-shaped keys from Alter and other common
macOS hotkey owners, decodes them, and reports collisions. It never prints
non-hotkey keys. Alter `appLocal` bindings appear in the inventory so they can
be avoided when choosing a replacement, but only `systemGlobal` bindings enter
cross-owner collision groups.
```sh
python3 scripts/hotkey-audit.py # all owners, human readable
python3 scripts/hotkey-audit.py --json # machine readable
python3 scripts/hotkey-audit.py --strict # exit 1 when anything collides
```
Two apps binding the same chord is not a warning in macOS, it is a silent
failure. Carbon hands the chord to whichever app registers it first, and the
loser gets no error. Symptom: a shortcut that "just stopped working" after a
reboot, with nothing in any log. If both apps launch at login, the winner can
change between boots.
## Change a hotkey
Prefer the GUI when the user is at the machine. Editing the plist is for
scripted or repeatable setups.
In the app: **Settings** with `cmd+,` then **Shortcuts**, or the Action Editor
at `cmd+shift+E` for an individual action's binding.
By file, all four steps matter:
```sh
osascript -e 'quit app "Alter"'; sleep 3 # 1
```
```python
# 2. read, assert the current value, then write. The assert is the guard
# against stomping a binding that already moved.
import plistlib, json, os
p = os.path.expanduser("~/Library/Preferences/com.wearedevx.alter.plist")
KEY = "KeyboardShortcuts_user_action_<action-uuid>"
d = plistlib.load(open(p, "rb"))
before = json.loads(d[KEY])
assert before["carbonKeyCode"] == 15 and before["carbonModifiers"] == 768, before
after = dict(before); after["carbonKeyCode"] = 2 # R to D
d[KEY] = json.dumps(after)
plistlib.dump(d, open(p, "wb"))
```
```sh
killall cfprefsd; sleep 1 # 3
open -a Alter # 4
```
Why each step, because skipping any one makes the edit look like it failed:
1. A running app holds its preferences in memory and rewrites them on quit,
discarding an external edit.
2. Load, verify, write. Modify one key and leave every other key untouched, so
transcript data in the same file is never re-encoded or read.
3. `cfprefsd` caches preferences. Without this, macOS keeps serving the old
value and can write its cache back over the file.From vanducng/skills, MIT.
More from vanducng/skills
- 0.631score
code-review
vanducng
Review code with a sharp, encouraging voice - inline GitHub PR comments + a tight summary.
SkillAFreshness: A★ 8Claude Code +9 - 0.631score
codex-workflow
vanducng
Run deterministic multi-step agent workflows in Codex - fan-out, parallel, schema-validated structured output - via the codex-workflow MCP orchestrator…
SkillAFreshness: A★ 8Claude Code +9 - 0.631score
astro-airflow
vanducng
Inspect and debug Airflow on Astronomer (Astro) deployments - DAG runs, task logs, container logs, env vars, and deployment state.
SkillAFreshness: A★ 8Claude Code +9 - 0.631score
auto-loop
vanducng
Drive a Claude Code session toward a verifiable goal until done or a hard cap fires - autonomous loop, no user intervention.
SkillAFreshness: A★ 8Claude Code +9 - 0.631score
aws
vanducng
Operate AWS accounts and services with the AWS CLI using identity-first, read-before-write, evidence-backed workflows.
SkillAFreshness: A★ 8Claude Code +9 - 0.631score
better-ui
vanducng
Applies exact UI polish values: concentric border radius, optical alignment, layered surface shadows, neutral image outlines, a 0.96 press scale, icon…
SkillAFreshness: A★ 8Claude Code +9 - 0.631score
brainstorm
vanducng
Explore the solution space when the path isn't obvious - invent options, stress-test them, pick one.
SkillAFreshness: A★ 8Claude Code +9 - 0.631score
apidesign
vanducng
Design stable, hard-to-misuse interfaces - REST/GraphQL endpoints, module boundaries, type contracts, component props, anything where one piece of code talks…
SkillAFreshness: A★ 8Claude Code +9 - 0.631score
browser-profile
vanducng
Manage named persistent browser profiles (cookies, localStorage, IndexedDB, cache) that both you and Claude can use against the SAME Chrome window without…
SkillAFreshness: A★ 8Claude Code +9 - 0.631score
agent-readiness
vanducng
Scores how ready a repository is for AI coding agents to work in it effectively, then remediates the gaps - grades agent instruction files, verifiable…
SkillAFreshness: A★ 8Claude Code +9 - 0.631score
browser-trace
vanducng
Capture a full DevTools-protocol trace of a locally driven browser automation - CDP firehose, screenshots, and DOM dumps - then bisect the stream into…
SkillAFreshness: A★ 8Claude Code +9 - 0.631score
cli-ts
vanducng
Build and maintain production TypeScript CLIs as stable public APIs - command contracts, packed-artifact correctness, npm publishing, CI/CD, docs, providers…
SkillAFreshness: A★ 8Claude Code +9
Signals
- Stars
- 8
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Sep 18, 2026 (1 month ago)
- Last release
- Oct 23, 2026 (5 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- Version
- 1.0.0
- License
- MIT
- Repository
- github.com/vanducng/skills
- Website
- skills.vanducng.dev
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from vanducng
- 0.631score
apidesign
vanducng
Design stable, hard-to-misuse interfaces - REST/GraphQL endpoints, module boundaries, type contracts, component props, anything where one piece of code talks…
SkillAFreshness: A★ 8Claude Code +9 - 0.631score
astro-airflow
vanducng
Inspect and debug Airflow on Astronomer (Astro) deployments - DAG runs, task logs, container logs, env vars, and deployment state.
SkillAFreshness: A★ 8Claude Code +9 - 0.631score
auto-loop
vanducng
Drive a Claude Code session toward a verifiable goal until done or a hard cap fires - autonomous loop, no user intervention.
SkillAFreshness: A★ 8Claude Code +9 - 0.631score
aws
vanducng
Operate AWS accounts and services with the AWS CLI using identity-first, read-before-write, evidence-backed workflows.
SkillAFreshness: A★ 8Claude Code +9 - 0.631score
better-ui
vanducng
Applies exact UI polish values: concentric border radius, optical alignment, layered surface shadows, neutral image outlines, a 0.96 press scale, icon…
SkillAFreshness: A★ 8Claude Code +9 - 0.631score
agent-readiness
vanducng
Scores how ready a repository is for AI coding agents to work in it effectively, then remediates the gaps - grades agent instruction files, verifiable…
SkillAFreshness: A★ 8Claude Code +9
Cite this page
alter skill. Agent Mart. https://agentmart.dev/skills/vanducng-alter (last updated 2026-10-24)