Agent skill

Shell Integration

by marcus in marcus/sidecar

Interactive shell/TTY integration with tmux session management, shell command execution, control-mode output capture with polling fallback, native cursor rendering, lazy scrollback, selection, paste…

MITAuto-check passedBackend & APIs

Install Shell Integration

skills CLI
$ npx skills add marcus/sidecar --skill shell-integration -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install marcus/sidecar shell-integration --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/marcus/sidecar.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/shell-integration .claude/skills/shell-integration && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
shell-integration
GitHub stars
1.1k
Token cost
~3.6k tokens
SKILL.md length
980 words
Files
2 (incl. references)
Skills in repo
19
Repo updated
First seen
Licence
MIT

At a glance

Interactive shell/TTY integration with tmux session management, shell command execution, control-mode output capture with polling fallback, native cursor rendering, lazy scrollback, selection, paste…

  • Works in 12 steps: Scope every async result by owner,… → Carry the generation end to end through… → Never call subprocesses from Init() or… → …
  • Working on shell integration
  • SKILL.md covers Package Structure, Data Flow, Core Abstractions and Key Mapping (keymap.go), plus 12 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Shell Integration is an agent skill from marcus/sidecar. Interactive shell/TTY integration with tmux session management, shell command execution, control-mode output capture with polling fallback, native cursor rendering, lazy scrollback, selection, paste handling, and inline editing. Use when working on shell integration, tmux features, command execution, or interactive mode.

Its SKILL.md is about 3.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including reference files (for example `references/tmux-notes.md`).

It sits in Backend & APIs, covering Authentication. It works with tmux. The repository describes itself as: Use sidecar next to CLI agents for diffs, file trees, conversation history, and task management with td. The licence is MIT.

When your agent uses it

  • Working on shell integration
  • Command execution
  • Interactive mode

Example prompts

  • “/shell-integration”

Workflow steps

12 steps, taken from the first numbered list in SKILL.md.

  1. Scope every async result by owner, target/role, activation, and keyed generation.
  2. Carry the generation end to end through capture, result, retry, and continuation.
  3. Never call subprocesses from Init() or View(); use Start()/tea.Cmd.
  4. Do not mutate model state in tea.Cmd callbacks; return a scoped message.
  5. Hash raw capture before cleaning/splitting, but mode changes must still clear coordinate state.
  6. Preserve newer live overlap when delayed history ranges prepend.
  7. Control clients are per tmux session and close/stop must invalidate and drain deliveries.
  8. Keep keyed capture fallback working until the first accepted model frame and after control failure; never run it as the healthy renderer.
  9. Consume all model bytes immediately and cadence only presentation snapshots; preserve immediate idle-leading output, a newest trailing…
  10. Use native cursor only for the focused live viewport; hide it offscreen, under modals, and in scrollback.
  11. Treat source OSC as untrusted; the sanitizer and independent fuzz oracle must cover nested 7-bit/C1 forms and removal-boundary synthesis.
  12. Width sync matters; resize panes/control clients when terminal geometry changes.

What it can do on your machine

Read from SKILL.md and the folder at commit 3792a4e. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are go and json).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Shell Integration loads about 3.6k tokens when it runs, and up to ~4.7k if it reads all its reference files. Until then it costs about 85 tokens; SKILL.md has 980 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~85
When it runs · the whole SKILL.md, loaded when a task matches
~3.6k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~4.7k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from marcus/sidecar at commit 3792a4e, republished under its MIT licence (© marcus). 980 words, ~3,606 tokens.

Download SKILL.mdSave it as .claude/skills/shell-integration/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
shell-integration
description
Interactive shell/TTY integration with tmux session management, shell command execution, control-mode output capture with polling fallback, native cursor rendering, lazy scrollback, selection, paste handling, and inline editing. Use when working on shell integration, tmux features, command execution, or interactive mode.
user-invocable
false

Shell Integration

Sidecar's interactive shell allows users to type directly into tmux sessions from within the TUI. Tmux remains the PTY backend. Sidecar renders ordered control-mode bytes through the shared tty.Model, whose VT behavior is behind the screenmodel adapter rather than implemented in plugin code.

Package Structure

internal/tty/                    # Shared tmux terminal abstraction
  tty.go                         # Core Model and State types
  keymap.go                      # Bubble Tea -> tmux key translation
  messages.go                    # Owner/target/generation-scoped messages
  session.go                     # tmux operations (send-keys, capture-pane, resize)
  scheduler.go                   # Keyed fallback-poll generation ownership
  control_*.go                   # Session-keyed tmux -C transport and manager
  capture_range.go               # Atomic bounded history capture
  cursor.go                      # Cursor positioning helpers
  paste.go                       # Paste handling (clipboard, bracketed paste)
  terminal_mode.go               # Capture-fallback mode recovery
  output_buffer.go               # Absolute, bounded live/history buffer
  editor_session.go              # Shared inline-editor tmux lifecycle

internal/plugins/workspace/
  interactive.go                 # Workspace-specific interactive mode logic
  interactive_selection.go       # Text selection in interactive mode
  terminal_viewport.go           # Pure shared terminal viewport renderer
  terminal_control.go            # Workspace target/layout policy for tty.Model
  terminal_history.go            # Lazy absolute scrollback loading
  terminal_search.go             # Loaded-history search
  terminal_links.go              # Safe URL/path detection and activation
  native_terminal.go             # Native cursor and contextual mouse mode
  view_preview.go                # Agent/shell preview composition
  mouse.go                       # Scroll handling
  types.go                       # InteractiveState type

internal/plugins/filebrowser/
  inline_edit.go                 # Inline editor mode using tty.Model
  handlers.go                    # Message handling for inline edit

Data Flow

User Keypress -> handleInteractiveKeys() -> tty.MapKeyToTmux() -> tmux send-keys

Pane output -> tmux -C ordered %output bytes
            -> session-pooled control actor
            -> seeded screenmodel adapter
            -> adaptive per-feed presentation publication
            -> owner/target/generation-scoped Tea message
            -> OutputBuffer + cursor/modes/history
            -> pure terminal viewport + native Bubble Tea cursor

Open/resync/history -> bounded capture seed/range
Control unavailable/dead -> one scoped capture-poll fallback + clean reseed

Core Abstractions

tty.Model

Embeddable component for interactive tmux functionality:

go
type Model struct {
    Config   Config        // Exit key, copy/paste keys, scrollback lines
    State    *State        // Current interactive state
    Width    int
    Height   int
    OnExit   func() tea.Cmd
    OnAttach func() tea.Cmd
}

// Usage:
p.inlineEditor = tty.New(&tty.Config{
    ExitKey: "ctrl+\\",
    ScrollbackLines: 600,
})
cmd := p.inlineEditor.Enter(sessionName, paneID)
tty.State
go
type State struct {
    Active        bool
    TargetPane    string      // tmux pane ID (e.g., "%12")
    TargetSession string
    LastKeyTime   time.Time   // Input timing and fallback polling decay
    CursorRow, CursorCol int
    CursorVisible        bool
    PaneHeight, PaneWidth int
    BracketedPasteEnabled bool
    MouseReportingEnabled bool
    OutputBuf      *OutputBuffer
    PollGeneration int          // For invalidating stale fallback polls
}
tty.OutputBuffer

Thread-safe bounded buffer with hash-based change detection:

go
func (b *OutputBuffer) Update(content string) bool {
    rawHash := maphash.String(seed, content)
    if rawHash == b.lastRawHash { return false }  // Skip ALL processing
    content = mouseEscapeRegex.ReplaceAllString(content, "")
    b.lines = strings.Split(content, "\n")
    return true
}
func (b *OutputBuffer) LinesRange(start, end int) []string

Key Mapping (keymap.go)

go
func MapKeyToTmux(msg tea.KeyPressMsg) (key string, useLiteral bool) {
    if msg.Mod.Contains(tea.ModCtrl) && msg.Code >= 'a' && msg.Code <= 'z' {
        return "C-" + string(msg.Code), false
    }
    switch msg.Code {
    case tea.KeyEnter:     return "Enter", false
    case tea.KeyBackspace: return "BSpace", false
    case tea.KeyTab:       return "Tab", false
    case tea.KeyUp:        return "Up", false
    }
    if msg.Text != "" {
        return msg.Text, true // Literal mode
    }
    return "", true
}

Modified keys use CSI sequences:

go
case "shift+up":   return "\x1b[1;2A", true
case "ctrl+up":    return "\x1b[1;5A", true
case "alt+up":     return "\x1b[1;3A", true
case "shift+tab":  return "\x1b[Z", true

For printable characters, tmux send-keys -l prevents interpretation.

Capture fallback and semantic observation

go
const (
    PollingDecayFast   = 50ms    // During active typing
    PollingDecayMedium = 200ms   // After 2s inactivity
    PollingDecaySlow   = 250ms   // After 10s inactivity
    KeystrokeDebounce  = 20ms    // Delay after keystroke
)

Control-mode bytes are the ordinary presentation source for every visible terminal surface. Adaptive capture polling exists only until the first seeded frame and after control/model failure. Workspace agent and shell observation continues independently for provider activity evidence; those captures never overwrite a model-owned presentation buffer.

The control actor writes every ordered byte into screenmodel immediately. Presentation alone is adaptive: the first changed frame after idle publishes inline, sustained changed frames publish at no more than 30 fps per pane-model feed, and one tokenized timer guarantees the newest trailing frame. Seed, reseed, and generation changes bypass the cap; input never enters this cadence. Ordinary Frame() snapshots omit diagnostic cells, while screen comparison explicitly requests the canonical grid.

For isolated performance diagnostics, run with both SIDECAR_PPROF=<port> and SIDECAR_TERMINAL_PERF=1, then read GET /debug/terminalperf. The endpoint is localhost-only and returns fixed numeric counts plus output-to-frame samples, p95, and maximum in microseconds. Its fixed vocabulary covers model publication, terminal views, row hits/misses/bypasses, link resolution, global Sessions list/preview work, application/Workspace/sidebar views, project preview composes/cache hits, and document frame builds/cache hits/scans/resolution. A pulse-only interval should reuse the project preview and perform no terminal, document, or row work. Keep counters off during CPU profiles, use a separate diagnostic process, and never interpret process-wide model-frame counts as per-feed fps when more than one pane-model feed may be live.

Set SIDECAR_TERMINAL_TRACE=1 only in an isolated proof run to log privacy-safe capture metadata (surface, role, reason, and generation). It never logs session or pane identity, terminal text, commands, paths, titles, or provider payloads. This distinguishes intentional semantic observation from presentation fallback.

Visibility and focus
StateActiveIdle
Visible + focused200ms2s
Visible + app unfocusedclamped to unfocused cadenceclamped
Not visible10-20s10-20s
Keyed generation ownership

tty.KeyedScheduler owns a generation per logical source (agent:<name>, shell:<tmuxName>, terminal-panel). Every schedule allocates a fresh token, and the token travels through capture, result, retry, and continuation messages. Reset invalidates pending timers and in-flight results.

go
token, cmd := scheduler.Schedule(key, delay, makeMessage)
if scheduler.IsCurrent(key, token) { /* apply result */ }

Control subscriptions are pooled by tmux session because a control client cannot observe panes in another session. Subscription close and manager stop invalidate and drain queued callbacks before returning.

Cursor Positioning (cursor.go)

Query
go
func QueryCursorPositionSync(target string) (row, col, paneHeight, paneWidth int, visible, ok bool) {
    cmd := exec.Command("tmux", "display-message", "-t", target,
        "-p", "#{cursor_x},#{cursor_y},#{cursor_flag},#{pane_height},#{pane_width}")
}
Rendering

Focused live terminal surfaces expose a tea.Cursor through the plugin CursorProvider capability. Workspace, filebrowser, and notes compute exact application coordinates and suppress the cursor under modals, while scrolled back, outside the visible slice, or when another surface owns focus. A painted cursor is not added to native-cursor content.

Height Mismatch Adjustment

When display height differs from tmux pane height:

go
if paneHeight > displayHeight {
    relativeRow = cursorRow - (paneHeight - displayHeight)
} else if paneHeight > 0 && paneHeight < displayHeight {
    relativeRow = cursorRow + (displayHeight - paneHeight)
}

Scrolling

Scrolling operates on the captured buffer. No tmux copy-mode involved.

go
type Plugin struct {
    previewOffset    int   // Lines from bottom (0 = at bottom/live)
    autoScrollOutput bool  // Auto-follow new output?
}
  • Scroll UP: pause auto-scroll, increment previewOffset
  • Scroll DOWN: decrement previewOffset, re-enable auto-scroll at 0
  • Live capture stays bounded at 600 lines; older 600-line ranges load lazily
  • Absolute buffer coordinates keep selections and search matches stable
  • Scrollback is bounded by the shared 10,000-line tmux history policy
  • Instant response (pure state manipulation, no subprocess calls)
Show full SKILL.md (416 more words)Show less

Copy/Paste

  • Copy: alt+c (configurable via interactiveCopyKey), or super+c (Cmd+C) as a built-in that a configured key does not replace. Cmd+C only arrives when the emulator passes it through — terminals that keep it for themselves (iTerm2) never deliver it, so alt+c stays the portable chord.
  • Paste: alt+v (configurable via interactivePasteKey)

Paste wraps text with bracketed paste sequences (\x1b[200~...\x1b[201~) when the application has enabled bracketed paste mode.

Fallback Terminal Mode Recovery (terminal_mode.go)

When capture fallback owns presentation, detects bracketed paste and mouse reporting modes by scanning the fallback snapshot. Healthy model-backed presentation receives these modes from the shared screen model.

Width Synchronization

Tmux panes are resized in background at all times (not just interactive mode):

go
func ResizeTmuxPane(paneID string, width, height int) {
    // resize-window, fallback to resize-pane for older tmux
}

Resize triggers: window resize, sidebar toggle/drag, selection change, agent/shell creation, interactive mode entry.

Inline Edit Mode (Filebrowser)

Uses tty.Model plus tty.EditorSession for vim/nano/emacs editing in the file preview pane. Session creation is history-safe and asynchronous:

go
func (p *Plugin) enterInlineEditMode(path string) tea.Cmd {
    return func() tea.Msg {
        session, err := tty.StartEditorSession(tty.EditorSessionOptions{Path: path})
        return InlineEditStartedMsg{Session: session, Err: err}
    }
}

Entry and Exit

Workspace Plugin:

  • Enter: enter / E when preview pane focused with output tab
  • Exit: Ctrl+\ (instant) or double-Escape (150ms delay)
  • Attach: Ctrl+] / t only when tmux_full_attach is on (default off)

Filebrowser Plugin:

  • Enter: e or Enter on a file (if inline edit enabled)
  • Exit: Ctrl+\ or double-Escape
  • Attach: Ctrl+] only when tmux_full_attach is on (default off)

Feature Flags

json
{
  "features": {
    "tmux_interactive_input": true,
    "tmux_inline_edit": true,
    "tmux_full_attach": false,
    "workspace_terminal_panel": true
  }
}

Configuration

json
{
  "plugins": {
    "workspace": {
      "interactiveExitKey": "ctrl+\\",
      "interactiveAttachKey": "ctrl+]",
      "interactiveCopyKey": "alt+c",
      "interactivePasteKey": "alt+v",
      "tmuxCaptureMaxBytes": 2097152,
      "copyOnSelect": false
    }
  }
}

Critical Rules

  1. Scope every async result by owner, target/role, activation, and keyed generation.
  2. Carry the generation end to end through capture, result, retry, and continuation.
  3. Never call subprocesses from Init() or View(); use Start()/tea.Cmd.
  4. Do not mutate model state in tea.Cmd callbacks; return a scoped message.
  5. Hash raw capture before cleaning/splitting, but mode changes must still clear coordinate state.
  6. Preserve newer live overlap when delayed history ranges prepend.
  7. Control clients are per tmux session and close/stop must invalidate and drain deliveries.
  8. Keep keyed capture fallback working until the first accepted model frame and after control failure; never run it as the healthy renderer.
  9. Consume all model bytes immediately and cadence only presentation snapshots; preserve immediate idle-leading output, a newest trailing frame, and unconditional seed/generation publication.
  10. Use native cursor only for the focused live viewport; hide it offscreen, under modals, and in scrollback.
  11. Treat source OSC as untrusted; the sanitizer and independent fuzz oracle must cover nested 7-bit/C1 forms and removal-boundary synthesis.
  12. Width sync matters; resize panes/control clients when terminal geometry changes.

References

  • Tmux integration notes -- detailed tmux CLI techniques, cursor tracking, resize sync, bracketed paste, mouse forwarding, modified keys, adaptive polling, debugging
  • Original spec: docs/plans/implemented/spec-tmux-interactive-input.md

© marcus, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file (references) in .claude/skills/shell-integration of marcus/sidecar.

  • SKILL.md
  • references/tmux-notes.md

Open the folder on GitHubat commit 3792a4e

Compare with similar skills

Shell Integration next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Shell Integration compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Shell Integration this skillmarcus/sidecar1.1k—~3.6kAutomated safety check: PassMIT
Fortify Developmentcoollabsio/coolify63k4 repos~1.9kAutomated safety check: PassMIT
Supabase Development and Debuggingsupabase/agent-skills2.7k3 repos~3.6kAutomated safety check: PassMIT
Better Auth Best Practiceslatitude-dev/latitude-llm4.7k7 repos~1.6kAutomated safety check: PassMIT
Supabasecurvenote/curvenote1695 repos~2.2kAutomated safety check: PassCustom licence
Gitnexus Exploringaws-samples/sample-kolya-br-proxy10611 repos~749Automated safety check: PassMIT-0

Similar skills

  • Fortify Development

    coollabsio/coolify

    ACTIVATE when the user works on authentication in Laravel. An agent skill from coollabsio/coolify.

    63k GitHub starsUsed in 4 repos~1.9k tokens
    Backend & APIsAuto-check passed
  • Official

    General Supabase skill for database, auth, Edge Functions, Realtime and storage work, plus client libraries, migrations, security audits, debugging and reading logs.

    2.7k GitHub starsUsed in 3 repos~3.6k tokens
    Backend & APIsAuto-check passed
  • Better Auth Best Practices

    latitude-dev/latitude-llm

    Configure Better Auth server and client, set up database adapters, manage sessions, add plugins, and handle environment variables.

    4.7k GitHub starsUsed in 7 repos~1.6k tokens
    Backend & APIsAuto-check passed
  • Supabase

    curvenote/curvenote

    A skill your agent uses when doing ANY task involving Supabase.

    169 GitHub starsUsed in 5 repos~2.2k tokens
    Backend & APIsAuto-check passed
  • Gitnexus Exploring

    aws-samples/sample-kolya-br-proxy

    Official

    A skill your agent uses when the user asks how code works, wants to understand architecture, trace execution flows, or explore unfamiliar parts of the codebase.

    106 GitHub starsUsed in 11 repos~749 tokens
    Backend & APIsAuto-check passed
  • Agentic Wallet

    coinbase/agentic-wallet-skills

    Crypto wallet operations via the awal CLI — sign in, check balances, send USDC/ETH/POL/SOL, trade tokens, fund the wallet, and use the x402 payment protocol to discover paid services, pay for API…

    127 GitHub starsUsed in 3 repos~1k tokens
    Backend & APIsAuto-check passed

More from marcus/sidecar

All 19 skills in this repo
  • Create Adapter

    marcus/sidecar

    Create conversation adapters for importing AI chat history from different tools (Claude Code, Cursor, Warp, Codex, etc.).

    1.1k GitHub stars~4.8k tokensUpdated 2 days ago
    Auto-check passed
  • Create Modal

    marcus/sidecar

    Create declarative modals using the modal library API. An agent skill from marcus/sidecar.

    1.1k GitHub stars~2.6k tokensUpdated 2 days ago
    Auto-check passed
  • Create Plugin

    marcus/sidecar

    Create new sidecar plugins implementing the plugin.Plugin interface, rendering views with Bubble Tea, handling keyboard input via keymap contexts, and integrating with the app shell (footer hints…

    1.1k GitHub stars~2.3k tokensUpdated 2 days ago
    Auto-check passed
  • Project Switching

    marcus/sidecar

    Project switching implementation in sidecar: project discovery, state management, UI flow, modal rendering, filtering, theme preview, and plugin reinitialization.

    1.1k GitHub stars~1.8k tokensUpdated 2 days ago
    Auto-check passed
  • Sidecar Website

    marcus/sidecar

    Writing and maintaining the Sidecar Docusaurus documentation site, including page structure, doc authoring, blog posts, styling, images, and deployment workflow.

    1.1k GitHub stars~1.7k tokensUpdated 2 days ago
    Auto-check passed
  • UI Features

    marcus/sidecar

    Implementing UI/UX features in sidecar including modals (internal/modal library), keyboard shortcuts, mouse support, scrolling, pill/tab rendering, and pane resizing.

    1.1k GitHub stars~4.6k tokensUpdated 2 days ago
    Auto-check passed

Works with

Categories

Questions about Shell Integration

What does Shell Integration do?

Interactive shell/TTY integration with tmux session management, shell command execution, control-mode output capture with polling fallback, native cursor rendering, lazy scrollback, selection, paste…. Shell Integration is an agent skill from marcus/sidecar. Interactive shell/TTY integration with tmux session management, shell command execution, control-mode output capture with polling fallback, native cursor rendering, lazy scrollback, selection, paste handling, and inline editing.

When should I use Shell Integration?

Shell Integration fits situations like: working on shell integration; command execution; interactive mode.

How do I install Shell Integration in Claude Code?

Run `npx skills add marcus/sidecar --skill shell-integration -a claude-code`. Or copy the skill folder (.claude/skills/shell-integration in marcus/sidecar) into .claude/skills/shell-integration in your project. Claude Code loads it when a task matches its description.

How do I install Shell Integration in Codex?

Run `npx skills add marcus/sidecar --skill shell-integration -a codex`. Or copy the skill folder (.claude/skills/shell-integration in marcus/sidecar) into .agents/skills/shell-integration in your project. Codex loads it when a task matches its description.

Can I use Shell Integration in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add marcus/sidecar --skill shell-integration -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/shell-integration, .gemini/skills/shell-integration, .github/skills/shell-integration and .opencode/skills/shell-integration in your project.

What does Shell Integration need to run?

SKILL.md names no scripts, command-line tools or credentials: Shell Integration is instructions for the agent only.

Does Shell Integration access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Shell Integration safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Shell Integration use?

Shell Integration is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Shell Integration use?

About 3.6k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.1k tokens, read only when the agent opens those files.

What are the alternatives to Shell Integration?

Skills that share tags, products or a category with Shell Integration: Fortify Development (coollabsio/coolify, 63k stars), Supabase Development and Debugging (supabase/agent-skills, 2.7k stars), Better Auth Best Practices (latitude-dev/latitude-llm, 4.7k stars) and Supabase (curvenote/curvenote, 169 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Shell Integration?

marcus (a GitHub user) maintains it in marcus/sidecar, which has 1,085 GitHub stars. The repository holds 19 skills in this directory. The repository was last updated on October 5, 2026.

Source: marcus/sidecar on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.