An SKSE plugin for Skyrim SE / AE that implements continuous follower hand-holding: a hand connection that survives walking, running, and terrain movement without breaking. Built on a combination of a Havok ball-and-socket constraint and kinematic position control.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ On AI use
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Most of this plugin's code was generated by Claude Code (Anthropic). The author (KEI997) handled:
- Spec decisions, prioritization, trade-off calls
- In-game testing and bug reports
- Pointing the AI at specific reference mod sources ("read this, use as reference")
- Reviewing and accepting/rejecting generated code
- SSEEdit ESP construction, Papyrus compilation, OAR animation authoring
All reference sources the AI read are publicly-licensed. Per-feature attribution is listed in the GitHub README:
https://github.com/Kei-BWV997/TETHER
If any listed author objects to their source being used this way, please contact and I will rework the affected feature or adjust the credit.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ Features
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- One hotkey to engage / release the hand-hold (default H, works with both keyboard and Xbox controller)
- While tethered, hands are physically bound via a Havok ball-and-socket constraint (the palms actually stay stuck together, not just visually near each other)
- The follower is kept directly behind the player via KeepOffsetFromActor
- While tethered, the player's max movement speed scales with distance to the follower — try to sprint away and you'll automatically be slowed down to a speed the follower can match (natural since you're literally holding their hand)
- Custom OAR conditions let you swap in dedicated tether animations
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ Animation status in v1.0.0
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Only ONE pattern currently has an authored motion: player-male (the puller). The other three folders (player-female, follower-male, follower-female) exist as empty structure — they contain only the OAR config.json, no .hkx files. Actors matching those conditions will just play vanilla locomotion while tethered.
The plugin ships this structure so users can drop their own .hkx into the correct folder to enable that pattern, or wait for future updates / a community animation pack.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ Known issues
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- Sometimes on engage, the follower doesn't start moving to the tether position. Workaround: release, walk a few steps away, then re-engage. Cause not yet identified.
- Third-person only (no first-person support)
- One active tether at a time (no multi-follower)
- Doesn't work while a weapon is drawn (deliberate — releases on draw)
- Very rare CTD possible if an actor's state changes at an unfortunate moment (auto-release handles the common cases: cell change, save load, weapon drawn, etc., but edge cases remain)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ MCM options
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- Toggle key rebind (keyboard + gamepad)
- Follower offset position, Follow / Catchup radius
- Elastic tether curve (ideal/slack distance, speed multipliers at both ends)
- Follower speed boost while tethered
- Palm attachment offset
- Auto-release toggles (on weapon drawn / on combat start / on extreme distance)
- R key resets a single option; "Reset All Settings" button
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ Source code / technical details
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Open source under MIT license:
https://github.com/Kei-BWV997/TETHER
The GitHub README covers:
- Per-feature reference-source table (which mods were used for which techniques)
- Technical details of each feature (hook sites, Papyrus APIs called, state machine)
- License and third-party file handling
Bug reports and pull requests are welcome via GitHub Issues.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ About the author
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
I'm normally an OStim animator, active on the OStim Community Discord. If you want to chat about this mod, request features, or just say hi — come by:
(TETHER is not an adult mod, but I develop from that community and that's where I hang out.)
1. Install all Requirements first
2. Install the TETHER zip via your mod manager (MO2 / Vortex) and enable it
3. Make sure TETHER.esp is enabled in your load order
4. Launch the game, load a save
5. Confirm "TETHER" appears in the MCM list
■ In-game usage
- With your weapon sheathed
- Look directly at your follower
- Press the hotkey (default H, rebindable in MCM) to hold hands
- Same hotkey releases
- Drawing a weapon automatically releases
■ Verifying it loaded correctly
On a clean launch, Documents\My Games\Skyrim Special Edition\SKSE\TETHER.log should contain lines like:
TETHER v1-0-0-0
TETHER loaded
OAR condition register (TETHER_IsTetheredPlayer): OK
OAR condition register (TETHER_IsTetheredFollower): OK
Settings::Load: 16/16 globals bound from TETHER.esp
kDataLoaded: TETHER ready
If you see "Settings::Load: 0/16", the plugin can't read EditorIDs. Make sure powerofthree's Tweaks is installed and TETHER.esp is enabled.
■ Uninstalling
Release the tether (make sure you're not currently holding hands), save the game, then disable the mod. This avoids leaving any Havok state in the save.
- CommonLibSSE-NG — Ryan-rsm-McKenzie / powerof3 (SKSE runtime API)
- Precision — Ersh (build system template)
- Open Animation Replacer — Ersh (OAR SDK)
- OpenAnimationReplacer - RaySense — Smooth (OAR custom-condition implementation pattern)
- FollowersAsCompanions — Alek323 (KeepOffsetFromActor usage and initial parameter values)
- FOMS — coexistence principle for follower AI management mods
- Wade In Water Redone / Keep Up! / Dragonborn's Cohort — TESFAN (SetMaximumMovementSpeed trampoline hook technique)
- FeetOfSkyrim — fenix31415 (post-behavior animation-layer hook approach)
- HIGGS — adamhynek (bone-local-transform override layer concept)
- Bow Charge Plus / Quick Light SE / Simple Recycling (MCM Papyrus structure reference)
- Gulan0 walk_run_sprint - OAR — GUlan0 (OAR JSON structure and folder conventions)
- asdsad121's 2024 Nexus forum post — the discovery that AddHavokBallAndSocketConstraint works on alive actors if ForceAddRagdollToWorld is called on both first
- @Ashihito1 (X/Twitter) demo video — the visual reference that led me to switch to the constraint approach
Fumito Ueda — ICO (2001), the origin point for the idea of a game built around continuous hand-holding
Anthropic — Claude Code (the code-generation AI)
