Skip to content

Conversation

@fcoury
Copy link

@fcoury fcoury commented Dec 30, 2025

Summary

This PR adds a standalone CLI tool (pty-skill) that enables any AI agent to manage interactive PTY sessions, not just OpenCode. The CLI works with Claude Code, Codex CLI, and other AI tools without requiring MCP server configuration (which would pollute context on every message).

Motivation

The current plugin only works with OpenCode. Many AI agents (Claude Code, Codex CLI, etc.) need to interact with long-running processes but lack this capability. An MCP server approach was considered but rejected because tool definitions would be included in every message, consuming tokens even when unused.

The CLI + Skill approach solves this:

  • Zero context pollution - skill is only loaded on-demand
  • Works with any agent that has bash access
  • Preserves existing plugin - OpenCode users are unaffected

Changes

Architecture

  • Extract shared core (src/core/) from plugin code
  • Unix socket daemon for session persistence across CLI calls
  • JSON-RPC protocol for client-daemon communication
  • Auto-start daemon on first CLI invocation

New Files

  • cli/ - Complete CLI implementation (daemon, client, commands)
  • src/core/ - Shared core (manager, buffer, types, logger)
  • SKILL.md - AI agent skill documentation with triggers
  • build-cli.ts - Build script for platform binaries
  • examples/claude-code-conversation.md - Real usage example

CLI Commands

pty-skill spawn <cmd> [args...]   # Start background PTY
pty-skill read <id>               # Read output with pagination/filtering
pty-skill write <id> <data>       # Send input (supports escape sequences)
pty-skill list                    # List all sessions
pty-skill kill <id>               # Terminate session
pty-skill status                  # Check daemon status
pty-skill daemon <action>         # Manage daemon

Package Changes

  • Renamed to pty-skill (more descriptive for cross-agent use)
  • Added bin entry for CLI
  • Updated GitHub workflow to build and upload release binaries

Backward Compatibility

  • Existing OpenCode plugin continues to work unchanged
  • Plugin now imports from shared src/core/ instead of duplicated code

Testing

  • Full integration test of spawn → read → write → kill flow
  • Tested with Claude Code (see examples/claude-code-conversation.md)

Introduces pty-skill CLI that works with Claude Code, Codex CLI, and other
AI agents without requiring MCP server context pollution.

Architecture:
- Extract shared core (manager, buffer, types) to src/core/
- Unix socket daemon for session persistence across CLI calls
- JSON-RPC protocol for client-daemon communication
- Auto-start daemon on first CLI invocation

CLI commands:
- spawn: Start background PTY sessions
- read: Read output with pagination and regex filtering
- write: Send input with escape sequence support
- list: List all sessions with status
- kill: Terminate sessions with optional cleanup
- status: Check daemon status
- daemon: Manage daemon (start/stop/restart/logs)

Also includes:
- SKILL.md with comprehensive usage documentation
- Build system for platform binaries (darwin-arm64, darwin-x64, linux-x64)
- Updated GitHub workflow to build and upload release binaries
- Package renamed to pty-skill with bin entry

The existing OpenCode plugin continues to work alongside the CLI.
- Prerequisites and setup instructions
- Running CLI directly from source
- Three options for installing as a Claude Code skill
- Instructions for symlinking SKILL.md to ~/.claude/skills/
- Building binaries for distribution
- Project structure overview
- Skills require subdirectory structure (~/.claude/skills/pty-skill/)
- Add Dependencies section to SKILL.md with install instructions
- Update README with correct symlink instructions
- Add examples/claude-code-conversation.md showing nvim interaction
- Link to example from README
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant