Official

claude

Claude Code agent provider: runs the Claude Code CLI headless for each account.

The app opens the listing; nothing installs until an agent in your Plugins workspace has read the files and you enable the plugin. In a terminal: cvg install convergence/claude@0.2.0

Permissions in 0.2.0

  • Provide agents agents.provideMediumAdds agents to the app.Provide the Claude Code agent and pass its tool calls to plugin tools
  • Run named programs processMediumStarts the listed programs.Run the Claude Code CLI (sessions, sign-in, `claude update`), and ask the npm installation that owns it about a newer versionPrograms: claudenpm
  • Read files fs.readMediumReads files in the listed places.Read Claude Code's sessions, settings and skills (in ~/.claude, other accounts' ~/.claude-* folders, the shared skills and the folder you choose in Settings), the project's .claude folder, the administrator's skill policy, and once, what the previous provider keptPlaces: ~/.claude/**~/.claude*/**~/.agents/skills/**the open workspaceits own data folder/Library/Application Support/ClaudeCode/managed-settings.json/etc/claude-code/managed-settings.json${settings.configDir}
  • Environment variables envMediumReads the listed environment variables.Find Claude Code's configuration directory, and the launch settings you set in CLAUDE_* variables (extra arguments, MCP servers, setting sources, appended system prompt, extra folders)Variables: HOMECLAUDE_CONFIG_DIRCLAUDE_EXTRA_ARGSCLAUDE_MCP_CONFIGCLAUDE_STRICT_MCP_CONFIGCLAUDE_SETTING_SOURCESCLAUDE_APPEND_SYSTEM_PROMPTCLAUDE_ADD_DIRS

Files

models.ts1.9 KB
// The model list, `models.json` beside `plugin.json` (the Rust
// `models.rs`).
//
// The CLI's own list has only the few models its picker recommends, under
// names without versions ("Opus", "Opus (1M context)"). Like T3 Code, the
// plugin keeps its own list instead: every model the CLI accepts, named by
// version. A plugin update can add a model by editing the file.
import MANIFEST from "./models.json" with { type: "json" };
import { objectOf } from "./wire.ts";

export interface Model {
  slug: string;
  name: string;
  context1m?: boolean;
  aliases?: string[];
  effort: string[];
}

/// The suffix that selects a model's 1M token context window.
export const CONTEXT_1M = "[1m]";

/// The `--model` value of a manifest entry.
export function modelValue(model: Model) {
  return model.context1m ? `${model.slug}${CONTEXT_1M}` : model.slug;
}

/// Whether a CLI model id names this manifest entry.
export function modelMatches(model: Model, id: string) {
  const bare = id.endsWith(CONTEXT_1M) ? id.slice(0, -CONTEXT_1M.length) : id;
  return model.slug === bare || (model.aliases ?? []).includes(bare);
}

/// The manifest, read leniently: entries without a slug or a name are
/// left out.
export function parseManifest(raw: unknown) {
  const value = objectOf(raw);
  const models = (Array.isArray(value?.models) ? value.models : [])
    .map(objectOf)
    .filter((model) => typeof model?.slug === "string" && typeof model.name === "string")
    .map((model) => ({
      slug: String(model.slug),
      name: String(model.name),
      context1m: model.context1m === true,
      aliases: Array.isArray(model.aliases) ? model.aliases.filter((alias) => typeof alias === "string") : [],
      effort: Array.isArray(model.effort) ? model.effort.filter((level) => typeof level === "string") : [],
    }));
  return { default: typeof value?.default === "string" ? value.default : "", models };
}

export function manifest() {
  return parseManifest(MANIFEST);
}

Versions

VersionPublishedPlugin APISizePermissionsStatus
0.2.0latestOct 5, 2026>=2 <3128.7 KB4 permissionsListed

Reviews and comments

0 threads · 0 reviews

No comments yet.