# Talk and Moves Workflows Laptop Handoff
This note records what needs to be present on another Mac for the talk split-view and moves split-view workflows to work after the Obsidian vault syncs.
## What syncs through the vault
These files live inside the Obsidian vault, so they should arrive on the laptop when the vault sync completes:
- `Attachments/tools/talk-split-view.html`
- `Attachments/tools/talk-split-view-launch.command`
- `Attachments/tools/talk-speaker-on-ipad.command`
- `Attachments/tools/moves-split-view.html`
- talk audience/speaker deck HTML files under `Attachments/`
- moves deck/map HTML files under `Attachments/`
- notes such as `Notes/Talk Split View App.md` and any `Notes/* — Argument Moves.md` files
The split-view HTML files are designed to resolve local vault files rather than depending on machine-specific state files. The talk launcher also resolves `talk-split-view.html` relative to its own location in `Attachments/tools/`.
## What does not sync automatically
These are machine-local or config-repo-local and need setup on the laptop:
- Claude config is Git-backed at `~/.claude` from `https://github.com/nickneek/claude-config.git`. The skills `talk-deck`, `moves`, and `moves-deck` are tracked there, so a fresh laptop can get them with `git clone` or `git pull`.
- Codex live config is not itself a Git repo. The sync-safe subset lives at `~/.codex-config` from `https://github.com/nickneek/codex-config.git`; after pulling on the laptop, run `~/.codex-config/scripts/apply-to-live.sh` to copy skills, rules, and config into live `~/.codex`.
- GitHub CLI authentication for gist publishing and editing. Run `gh auth status` and make sure the account has `gist` scope.
- Codex/Claude app or CLI setup, including whatever sync mechanism normally mirrors `~/.claude` and `~/.codex` config.
- macOS permissions for `.command` launchers, Safari automation, and Sidecar window movement.
- Executable bits on `.command` files if the sync provider drops them.
## First laptop setup checklist
1. Let the Obsidian vault finish syncing.
2. Confirm these vault files exist:
- `Attachments/tools/talk-split-view.html`
- `Attachments/tools/moves-split-view.html`
- `Attachments/tools/talk-split-view-launch.command`
- `Attachments/tools/talk-speaker-on-ipad.command`
3. If double-clicking a `.command` file gives an access or privilege error, run:
```bash
chmod +x "/path/to/My Obsidian Vault/Attachments/tools/talk-split-view-launch.command"
chmod +x "/path/to/My Obsidian Vault/Attachments/tools/talk-speaker-on-ipad.command"
```
4. Set up Claude config from Git if it is not already present:
```bash
git clone https://github.com/nickneek/claude-config.git ~/.claude
# or, if already cloned:
cd ~/.claude && git pull
```
This supplies `~/.claude/skills/talk-deck`, `~/.claude/skills/moves`, and `~/.claude/skills/moves-deck`.
5. Set up Codex config from Git if it is not already present:
```bash
git clone https://github.com/nickneek/codex-config.git ~/.codex-config
cd ~/.codex-config && git pull
~/.codex-config/scripts/apply-to-live.sh
```
This copies the synced Codex skills into live `~/.codex/skills/`.
6. Restart Claude/Codex after adding skills so their metadata is picked up.
7. Check GitHub CLI auth:
```bash
gh auth status
```
The moves-deck and talk-deck publishing workflows need gist access.
8. Open `Attachments/tools/talk-split-view.html` directly in Safari. It should load the current vault-local audience and speaker decks without needing URL parameters.
9. Open `Attachments/tools/moves-split-view.html`. It should load its default moves deck/map, or a specific moves workspace if opened from a note link with `deck=`, `map=`, and `topic=` parameters.
10. If using iPad/Sidecar, grant the shell/Terminal app Accessibility permission when macOS asks. The speaker-on-iPad launcher depends on Safari automation and window movement.
## Working model
Talk workflow: audience deck, speaker deck, and speaker note stay in lockstep. The split viewer gives the delivery/rehearsal surface. Local split view uses `sync=off`; separate device delivery uses the shared `sync=<topic>` channel.
Moves workflow: the Obsidian moves note, slide deck, map, and split viewer are synchronized views of one moves workspace. Nick can refer to either the note or the slide/map view, and Claude/Codex should update the note first, regenerate deck and map, then publish/refresh any live viewer if the workspace uses gist/ntfy.
## Quick verification commands
From the laptop:
```bash
gh auth status
ls -l "/path/to/My Obsidian Vault/Attachments/tools/"*.command
```
Inside Claude/Codex, ask after pulling/applying config:
- `Do you have the moves and moves-deck skills available?`
- `Open the talk split-view app.`
- `Open the moves split-view app.`
## If something fails
- Blank talk split-view: check that the local audience/speaker deck files exist under `Attachments/generating-philosophy-talk/`.
- `.command` will not run: re-run `chmod +x` on the launcher.
- Sidecar window does not move: check macOS Accessibility permissions for the app running the command.
- Live gist does not update: check `gh auth status`, then confirm the token has `gist` scope.
- Split-view does not auto-refresh: check the note frontmatter for `refresh-topic`, then verify that the deck/map link includes the same `topic=` value.