Imported from twidi/twicc (
src/twicc/agent/plugin/twicc/skills/twicc-info/SKILL.md). Install upstream withnpx skills add twidi/twicc --skill twicc-info. Copyright stays with the author.
TwiCC Info
A single read-only command that always reports TwiCC's running version and provider list, and on demand composes any subset of four sections: presets, commands, models, agent-settings. Pass zero or more section names as positional arguments — the output keys appear in canonical order regardless of input order, duplicates collapse. Everything is JSON on stdout. Nothing here writes to disk or to the live TwiCC.
When to use
- You want to know the TwiCC version, the registered providers, and which of them the user has disabled.
- You're about to script a
create-session/update-session settingscall and need the effective default agent settings, the valid model identifiers / aliases, the allowed values for each setting, or a stored preset to start from. - You want to find a slash / dollar command by substring of its literal or its description.
- You want to check, for an agent-setting value (e.g.
effort=max), which models actually support it. - You want several of the above in one call instead of issuing several CLI runs.
How to invoke
Prefer the mcp__twicc__* tools — inside a TwiCC session you normally have all of them. One per command below (the command with / and - turned into _, e.g. mcp__twicc__create_session, mcp__twicc__update_session_settings). Use them instead of the $TWICC CLI: same arguments, same JSON result, no shell, and your session identity travels with the call so self/parent resolve on their own. Most of them are deferred, so a tool missing from your visible tool list is not a missing tool — search your full tool list for the one you need (ToolSearch on Claude Code, ALL_TOOLS on Codex), and fall back to the $TWICC CLI below only when the search finds nothing (outside a session, or when scripting from a terminal).
TwiCC's executable varies by launch mode (uvx, dev, installed tool). ALWAYS USE THIS TO RESOLVE $TWICC AT THE START OF EACH BASH INVOCATION:
TWICC=${TWICC_BIN:-$(command -v twicc 2>/dev/null)}
[ -n "$TWICC" ] || { echo "TwiCC executable not found in this context" >&2; exit 1; }
Then run $TWICC <args> — never quote $TWICC (use $TWICC args, never "$TWICC" args): it may expand to multiple words, which quoting would break.
Command shape
$TWICC info [SECTION...] [OPTIONS]
SECTION... is any combination (0+) of presets, commands, models, agent-settings, plus the shortcut all (expands to the four others). Order does not matter and duplicates are ignored.
Options
--provider <key>— narrow every requested section to a single provider (claude_code,codex, …). Naming a provider also bypasses the disabled-provider filter for that one — its data is returned even when disabled. The top-levelprovidersdict always lists every registered provider regardless of this flag.--project <PROJECT>— directory path or project id (drop the leading dash on ids). Only consumed whencommandsis requested. Adds the project-scoped commands on top of the globals — i.e. exactly what a session inside that project would see at runtime. Passing it withoutcommandsis an error.--filter "TOKENS"— case-insensitive whitespace-tokenised substring search forcommands: every token must appear in either thecommandliteral or thedescription. Only consumed whencommandsis requested.--include-disabled-providers— flips the disabled-provider filter on the section payloads, so disabled providers are listed alongside the enabled ones. Does not change the top-levelprovidersdict (which is always exhaustive).
Always-present keys
Every invocation returns at minimum:
{
"twicc_version": "1.7.0",
"twicc_executable": "uvx twicc",
"providers": {
"claude_code": {"identifier": "claude_code", "name": "Claude Code", "disabled": false, "default": true, "orchestration": true},
"codex": {"identifier": "codex", "name": "Codex", "disabled": true, "default": false, "orchestration": false}
},
"available_info_arguments": {}
}
twicc_version— the installed TwiCC version.twicc_executable— shell command that re-invokes the same TwiCC distribution (e.g.uvx twicc,twicc,uv run --directory <dir> run.py, an absolute path, …). Suffix it with subcommand args to reach this TwiCC instance from anywhere.providers— dict keyed by provider identifier. Each entry carries:identifier— same as the dict key.name— human-readable label.disabled—truewhen the user has disabled the provider;create-sessionand similar calls will refuse it.default—truefor the user's default provider;falseotherwise.orchestration—truewhen the provider is fair game for agents picking providers on their own while orchestrating sessions (seetwicc-orchestration). Soft preference: an explicit user request for anorchestration: falseprovider still works as long as it is notdisabled. Alwaysfalsefor disabled providers.
available_info_arguments— discovery dict for the positional sections this command itself accepts (presets,commands,models,agent-settings,all). The reserved__descriptionkey explains the dict; every other key is an accepted argument paired with a one-line summary of what it adds to the payload.
Section payloads
Each section adds one top-level key with the exact name of the section (presets, commands, models, agent-settings). Within a section, the data is keyed by provider identifier.
presets
$TWICC info presets [--provider <key>] [--include-disabled-providers]
Each provider's list starts with the synthetic __defaults__ entry (always first), then the user-defined presets in their on-disk order.
"presets": {
"claude_code": [
{
"name": "__defaults__",
"permission_mode": "bypassPermissions",
"model": "opus",
"effort": "high",
"thinking": true,
"claude_in_chrome": true,
"fast_mode": false,
"context_max": 200000
},
{
"name": "Maximal",
"model": "opus-4.7",
"context_max": 1000000,
"effort": "max",
"thinking": true,
"permission_mode": "bypassPermissions",
"claude_in_chrome": true
}
]
}
__defaults__ reports the user defined defaults a brand-new session inherits — user-configured values merged with provider hard-coded fallbacks. The name is reserved; user presets cannot use it.
Fields a provider does not use are absent or null.
commands
$TWICC info commands [--provider <key>] [--project <PROJECT>] [--filter "TOKENS"] [--include-disabled-providers]
Each provider's list carries the slash / dollar commands available, ordered by command. Without --project, only globals (project=NULL) are listed; with one, the project-scoped commands are added on top.
"commands": {
"claude_code": [
{
"command": "/commit",
"plugin_name": "commit-commands",
"description": "Create a git commit",
"argument_hint": null,
"is_builtin": false,
"is_workflow": false,
"scope": "global"
}
]
}
command— the literal invocation:activation_char + name(e.g./commit,$skill-name).plugin_name—nullfor commands that aren't shipped by a plugin.is_workflow—truefor saved workflows (.claude/workflows/*.js); Claude Code only.scope—"global"or"project:<id>".
models
$TWICC info models [--provider <key>] [--include-disabled-providers]
"models": {
"claude_code": [
{
"identifier": "opus-5",
"alias": "opus",
"family": "opus",
"version": "5",
"latest": true,
"enabled": true,
"retirement_date": null,
"extra": {
"supports_1m": true,
"supports_effort_xhigh": true,
"supports_effort_max": true,
"supports_fast": true,
"supports_permission_auto": true,
"supports_highres_images": true,
"supports_thinking_disabled": true
}
}
]
}
identifier— the canonicalfamily-versionform. Always valid as a--modelvalue (accepted bycreate-session/update-session settings).alias— the bare family name ("opus","sonnet","gpt", …) for the latest entry of each family;nullotherwise. Passing the alias means "always resolve to the family's current latest". Pin toidentifierfor a specific version; usealiasfor auto-upgrade on a new release.enabled—falsewhen the model has been taken out of service: it is not a valid--modelvalue (it is dropped fromagent-settings'selected_modelchoices) and anything still set to it resolves to its fallback.truefor normal models.disable_reason— short human-readable explanation, present only whenenabledisfalse; absent otherwise.retirement_date— ISO date when the model is retired, ornullfor evergreen / latest entries.extra— provider-specific capability flags (every flag listed, includingfalsevalues). Cross-references therestricted_tolists inagent-settings.
The SDK-side full_name and pricing are intentionally omitted.
agent-settings
$TWICC info agent-settings [--provider <key>] [--include-disabled-providers]
"agent-settings": {
"claude_code": {
"model": {
"values": [
{"value": "fable", "latest": true},
{"value": "fable-5", "latest": false},
{"value": "opus", "latest": true},
{"value": "sonnet", "latest": true},
{"value": "opus-4.8", "latest": false}
],
"aliases": {"max": "fable", "strongest": "fable", "medium": "opus", "balanced": "opus", "min": "sonnet", "fastest": "sonnet", "cheapest": "sonnet"}
},
"effort": {
"values": [
{"value": "low", "restricted_to": null},
{"value": "medium", "restricted_to": null},
{"value": "high", "restricted_to": null},
{"value": "xhigh", "restricted_to": ["fable-5.1", "fable", "fable-5", "opus-5", "opus", "opus-4.8", "opus-4.7", ...]},
{"value": "max", "restricted_to": ["fable-5.1", "fable", "fable-5", "opus-5", "opus", "opus-4.8", "opus-4.7", "opus-4.6", ...]}
],
"aliases": {"min": "low", "max": "max"}
},
"permission_mode": {
"values": [
{"value": "default", "restricted_to": null, "description": "Prompts for permission on first use of each tool"},
{"value": "auto", "restricted_to": ["fable-5.1", "fable", "fable-5", "opus-5", "opus", ...], "description": "Auto-approves tools, with safety checks blocking risky actions"}
],
"aliases": {"min": "dontAsk", "strict": "dontAsk", "safe": "dontAsk", "max": "bypassPermissions", "open": "bypassPermissions", "full": "bypassPermissions"}
},
"permission_mode_if_untrusted": {
"values": [
{"value": "default", "restricted_to": null, "description": "Prompts for permission on first use of each tool"},
{"value": "acceptEdits", "restricted_to": null, "description": "Auto-accepts file edit permissions"}
],
"aliases": {"min": "dontAsk", "safe": "dontAsk", "max": "acceptEdits"}
},
"context_max": {
"values": [
{"value": 200000, "context_max_alias": "200k", "restricted_to": null},
{"value": 1000000, "context_max_alias": "1m", "restricted_to": ["fable-5.1", "fable", "fable-5", "opus-5", "opus", ...]}
],
"aliases": {"min": "200k", "max": "1m"}
}
}
}
Field keys match the CLI flags / presets: the model is model (not the wire name selected_model) and extended thinking is thinking (not thinking_enabled); the rest share the same name.
restricted_to: null— value is available on every model of this provider.restricted_to: [...]— value applies only to those model identifiers / aliases (same vocabulary asmodels.identifier/models.alias).description— present only for values that have a documented note (today: everypermission_modevalue across providers, plusfast_mode=truewhere supported). Silently absent otherwise.context_max_alias— only on entries of thecontext_maxfield: compact human-friendly form ofvalue(200000→"200k",1000000→"1m",272000→"272k"). Thevalue(raw integer) remains the canonical form; the alias is a convenience for display and matches the syntax accepted by--context-maxincreate-session/update-session settings.aliases— alias → concrete-value map for the field ({"max": "fable", ...}): pass the alias to the matching--<field>flag increate-session/update-session settings/update-sessions settingsand it resolves to the value for the session's provider.permission_mode_if_untrusted— the restricted permission-mode subset that applies in an untrusted (or unknown-trust) project:bypassPermissions/yoloare dropped, and itsmaxalias lands on the most permissive allowed mode (Claude CodeacceptEdits, Codexauto_review). You never pass this field directly —create-session/update-sessionresolve and clamppermission_modeagainst it automatically (with a note) when the target project is untrusted. Project trust is a human-only decision.model.values— each accepted--modelvalue with alatestflag (the current flagship of its family); richer per-model metadata (family, version, capabilities, retirement) lives in themodelssection.
This is the canonical "what can I set, and when does it apply" reference before calling update-session settings or building a preset.
Examples
# Always-on header only
$TWICC info
# A single section
$TWICC info models
$TWICC info presets --provider claude_code
$TWICC info commands --filter "git commit"
$TWICC info commands --project /home/twidi/dev/myproj
$TWICC info agent-settings --provider codex
# Several sections composed in one shot
$TWICC info models agent-settings
$TWICC info presets models --provider claude_code
$TWICC info presets commands models agent-settings
$TWICC info all # same as the previous line
# Include disabled providers in the section payloads
$TWICC info models --include-disabled-providers
Related commands
$TWICC create-session— accepts a--presetname (one of the user presets listed byinfo presets) and individual setting overrides. Skill:twicc-create-session.$TWICC update-session <session_id> settings— same preset / override vocabulary on an existing session. Skill:twicc-update-session.$TWICC projects— browse projects (needed to feedinfo commands --project). Skill:twicc-projects.$TWICC usage— current usage quotas and cost estimates per provider. Skill:twicc-usage.
How to present results
- No section requested — restate
twicc_version, then list the providers and flag any withdisabled: true. presets— show__defaults__first labelled as "effective defaults", then the user presets by name. Mention the provider scope explicitly when more than one provider is in the output.commands— group by provider; within a provider, list incommandorder and optionally split by scope (globals first, then project-scoped). For--filterqueries, lead with the count of matches.models— group byfamily; show the latest entry first with both itsidentifierandalias. Surfaceretirement_dateon non-latest entries. Translate theextraflags into a short capability bullet list when relevant ("1M context", "effort=max", …).agent-settings— for each field, list values briefly. For values with arestricted_to, summarise the requirement ("only on opus 4.6+") rather than dumping the full list. Always surfacedescriptionverbatim when present.- Multi-section payloads — give each requested section its own short summary in canonical order (
presets,commands,models,agent-settings) rather than dumping the whole JSON. - You are in TwiCC — when discussing a session in the output of another command, link to it:
[link text](/project/{project_id}/session/{session_id}).