abra over plain 'ssh cc-ci abra ...' has no TTY -> FATA 'inappropriate ioctl for device' (the abra error). The working harness (runner/harness/abra.py) wraps abra in util-linux 'script' for a pseudo-TTY + passes -n. Apply the same in the recipe-upgrade and upgrade-all skills: every abra call becomes ssh cc-ci 'script -qec "abra <args> -n" /dev/null'. Confirmed: abra server ls FATAs plain, works pty-wrapped. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>