OpenSpace typescript-typecheck-fallback
Reliably run TypeScript type-checking (npx tsc --noEmit) by using shell_agent as a fallback when run_shell fails due to environment or timeout issues.
install
source · Clone the upstream repo
git clone https://github.com/HKUDS/OpenSpace
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/HKUDS/OpenSpace "$T" && mkdir -p ~/.claude/skills && cp -r "$T/showcase/skills/typescript-typecheck-fallback" ~/.claude/skills/hkuds-openspace-typescript-typecheck-fallback && rm -rf "$T"
manifest:
showcase/skills/typescript-typecheck-fallback/SKILL.mdsource content
TypeScript Type-Check with shell_agent Fallback
When verifying TypeScript compilation as part of a build or validation workflow,
run_shell may fail with unknown errors due to shell environment issues, missing PATH entries, timeout constraints, or other transient problems. This skill describes a two-step pattern: attempt the check with run_shell first, then fall back to shell_agent if it fails.
When to Use
- After creating or modifying TypeScript source files and you need to confirm there are no type errors.
- As part of a CI-like verification step inside an autonomous workflow.
- Any time
returns an unexpected or unclear error for arun_shell
invocation.tsc
Step-by-Step Pattern
Step 1 — Attempt with run_shell
(fast path)
run_shellTry the direct command first. This is fast and gives immediate output when the environment is well-configured.
run_shell: npx tsc --noEmit
Evaluate the result:
- ✅ Exit code 0, no errors → Type-check passed. Done.
- ❌ Exit code non-zero with TypeScript diagnostics → Real type errors exist; surface them and fix.
- ⚠️ Unknown error, timeout, or no useful output → Proceed to Step 2.
Step 2 — Fall back to shell_agent
(reliable path)
shell_agentWhen
run_shell fails in an ambiguous or environmental way, delegate to shell_agent with a natural-language task. shell_agent can autonomously:
- Locate the correct
/npx
binarytsc - Retry on transient failures
- Navigate PATH or permission issues
- Return a structured summary of any type errors
Task string to pass to
:shell_agent
Run `npx tsc --noEmit` in the project root and report all TypeScript type errors found. If there are no errors, confirm the compilation succeeded. If tsc is not available, attempt to install TypeScript locally with `npm install --save-dev typescript` first.
Evaluate the result:
- ✅ "No errors found" / exit 0 → Type-check passed.
- ❌ Type errors listed → Collect and fix the reported diagnostics, then re-run.
- ⚠️
missing → Ensure the file exists in the project root before re-running.tsconfig.json
Decision Flowchart
run_shell("npx tsc --noEmit") │ ├─ success (exit 0) ──────────────────► ✅ PASS │ ├─ type errors reported ──────────────► ❌ Fix errors, retry │ └─ unknown/env error ─────────────────► shell_agent(natural-language task) │ ├─ success ───► ✅ PASS └─ errors ───► ❌ Fix & retry
Example Implementation
# Pseudo-code for an autonomous agent loop result = run_shell("npx tsc --noEmit", timeout=60) if result.exit_code == 0: print("TypeScript check passed.") elif result.exit_code != 0 and result.stderr contains "TS\d+": # Real TypeScript diagnostics — surface and fix them raise TypeScriptError(result.stderr) else: # Ambiguous failure — delegate to shell_agent shell_agent( task="Run `npx tsc --noEmit` in the project root and report all TypeScript " "type errors found. If there are no errors, confirm compilation succeeded. " "If tsc is not available, install it first with `npm install --save-dev typescript`." )
Tips
- Always have a
:tsconfig.json
requires a valid config. If none exists, generate one first withtsc --noEmit
.npx tsc --init - Set a reasonable timeout: TypeScript compilation on large projects can take 30–120 seconds. Give
at leastrun_shell
.timeout=90 - Scope to changed files when possible: Use
or a path glob to limit what tsc checks if only a subset of files changed.--project tsconfig.json - Prefer
for first-time setups: If the project environment is freshly created and dependencies may not be fully installed, start withshell_agent
directly to avoid a predictableshell_agent
failure.run_shell
Generalizing Beyond TypeScript
This same fallback pattern applies to any build/lint/type-check command that may be sensitive to shell environment:
| Tool | Primary command | fallback task |
|---|---|---|
| TypeScript | | "Run npx tsc --noEmit and report errors" |
| ESLint | | "Run npx eslint on the src directory and report lint errors" |
| Python mypy | | "Run mypy on the src directory and report type errors" |
| Go build | | "Run go build and report compilation errors" |
The core principle:
for speed; run_shell
for resilience.shell_agent