Skip to content

Host support: Cline — native SDK/CLI plugins and separately verified IDE rules, skills, hooks, and MCP #705

Description

@ScriptedAlchemy

Scope / evidence

P2 feature expansion, researched 2026-09-06. Agent Bundle baseline 5fc8de37c9695b816d55bdcf18a6bcb1dfee69f5. Official documentation read; no Cline installation or native execution performed.

The initial Ponytail comparison understated this host. Cline now documents native AgentPlugin packages, but explicitly limits that feature to SDK, CLI and Kanban—not the VS Code or JetBrains extension. One host-family issue must maintain separate supported profiles; do not infer IDE plugin support from the CLI implementation.

Primary specs / harness docs

Implementation must pin a host/SDK revision. The configuration overview and MCP page currently list different CLI storage locations, and older IDE hook roots differ from newer shared roots. Preserve this as a version/surface verification requirement, not a reason to write both configurations blindly.

Tier 1: native CLI/SDK package

A package declares package.json.cline.plugins with explicit .js/.ts entry paths and capability metadata. Without it, the installer can recursively discover code; that is dangerous in a composite directory containing other hosts' executable entries. Emit explicit paths.

composite-root/
  package.json
  cline-plugin/index.js
  skills/review/SKILL.md
  runtime/                    # shared compiled implementation if needed
{
  "name": "@example/plugin",
  "type": "module",
  "cline": {
    "plugins": [{"paths":["./cline-plugin/index.js"],"capabilities":["tools","hooks"]}]
  },
  "peerDependencies": {"@cline/sdk":"*"},
  "peerDependenciesMeta": {"@cline/sdk":{"optional":true}}
}

This illustrates the native package contract, not a final dependency-version recommendation. The host provides @cline/*; maintain scoped compiler-evidence for host-provided imports rather than bundling another Cline runtime or relaxing standalone self-containment.

AgentPlugin is an object with identity, optional manifest, setup and hooks. Hooks live in their own object and have semantic distinctions such as beforeRun/beforeTool/afterTool; map only proven canonical equivalents. Register tools from the canonical operation/schema rather than introducing another author-maintained tool definition. Do not use ClineCore to start a new agent loop inside the plugin.

Installation and profiles

cline plugin install npm:@example/plugin
cline plugin install https://github.com/example/plugin.git@v1.0.0
cline plugin install ./composite-root --cwd /absolute/project
cline config

Native local installation copies into the managed store; it is not automatically a live symlink. Project scope uses .cline/plugins, global uses ~/.cline/plugins; lookup supports compatibility paths. Detect actual installed entries before removing/updating and preserve plugin disabled state and independent user files. --force is not a substitute for receipt ownership.

For IDE profiles, use the supported Rules/Skills/Hooks/MCP UI and native storage contract rather than claiming the package installer loads there. Skills are separately documented as experimental and require the feature enabled; leave that consent to the operator.

Tier 2: executable hooks and MCP

Shell hook naming uses the native hook name, extensionless on POSIX and .ps1 on Windows. Older hook docs use .clinerules/hooks plus Documents/Cline/Hooks; the shared configuration guide also documents .cline/hooks and ~/.cline/hooks. Pin discovery order in native evidence before choosing an output path.

Input carries task identity, workspaceRoots and event-specific nested data. Output is JSON, for example:

{"cancel":false,"contextModification":"Declared project guidance","errorMessage":""}

Do not substitute Claude exit-code/output JSON merely because both have a PreToolUse event. Distinguish event cancellation from successful observation and preserve stderr as diagnostics. Global and project hooks can both execute; duplicate registration is a real composite concern.

MCP supports local command/argv and remote configuration. Example operator-owned entry:

{"mcpServers":{"example":{"command":"node","args":["/absolute/plugin/mcp/example.mjs"],"disabled":false,"autoApprove":[]}}}

Remote recommended transport is explicitly "type":"streamableHttp"; omitting the type may select legacy SSE. Use cline mcp or the IDE's Configure MCP Servers control to resolve actual storage. Do not copy secrets into generated files or populate autoApprove on the user's behalf.

Acceptance

  • Pin native package, SDK and IDE profiles; unsupported profile selection is explicit.
  • Exact cline.plugins entry discovery prevents imports of unrelated composite JS files.
  • Host-provided SDK imports remain scoped and version-compatible; normal runtime dependencies survive production install.
  • A canonical native tool preserves schema/defaults/result/error/context/cancellation without a duplicate operation registry.
  • Rules/skills-only IDE fixture starts no native plugin, MCP or Flight runtime.
  • Native shell-hook JSON, task/workspace identity, cancel/context effects, POSIX/PowerShell naming and enablement work in real fixtures.
  • Resolve documented config-path differences against the actual pinned host; no silent writes to ineffective fallback files.
  • MCP disabled state, transport and native authorization are preserved; successful result tested after relocation and source removal.
  • Test global/project/compatibility precedence, replacement and uninstall preserving unrelated files.
  • Apply Composite conformance: test cross-host auto-discovery and precedence, not only file collisions #651 forbidden-discovery and Small-plugin acceptance: skills and plain hooks without an unnecessary MCP/RSC runtime or empty Workbench #652 small-plugin tests; no broad removal of AB4106.

No new agent orchestration, model/provider setup, task scheduler, automatic trust grant or forced IDE feature enablement is in scope.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions