Debug parenthesis balance issues in Scheme files. Invoke when encountering "unexpected end-of-file reading list" or "unexpected close parenthesis" errors, or when manually counting parens.
Invoke this skill when you encounter:
Exception in read: unexpected end-of-file reading list at line NException in read: unexpected close parenthesis at line Nparen-locate - Primary Tool (Stack-Based)The most useful tool. Shows exact locations of paren errors:
scheme -q <<'EOF'
(load "boundary/tools/paren-check.ss")
(paren-locate "path/to/file.ss")
EOF
Output format is compiler-friendly (file:line:col):
path/to/file.ss:46:1: error: unclosed '(' - never closed
path/to/file.ss:61:19: error: mismatched brackets: opened '[' at line 61 col 12, closed with ')'
paren-ok? - Quick CheckReturns #t if file is balanced, #f otherwise:
scheme -q <<'EOF'
(load "boundary/tools/paren-check.ss")
(paren-ok? "path/to/file.ss")
EOF
paren-errors - Programmatic AccessReturns list of error structs for further processing:
scheme -q <<'EOF'
(load "boundary/tools/paren-check.ss")
(paren-errors "path/to/file.ss")
EOF
paren-check - Legacy Balance ReportLine-by-line balance report (less precise but shows running totals):
scheme -q <<'EOF'
(load "boundary/tools/paren-check.ss")
(paren-check "path/to/file.ss")
EOF
./fold -c / ./fold --check-syntax - Quick CLI CheckFast paren check from command line (no daemon needed):
./fold -c path/to/file.ss
./fold --check-syntax path/to/file.ss
Output:
# Success:
path/to/file.ss: ✓ All parentheses balanced
# Error:
path/to/file.ss:46:1: error: unclosed '(' - never closed
Exit codes: 0 = balanced, 1 = errors found.
paren-locate firstparen-ok? to confirm the fix# 1. You edited exports.ss and get:
# Exception in read: unexpected end-of-file reading list at line 46
# 2. Run paren-locate
scheme -q <<'EOF'
(load "boundary/tools/paren-check.ss")
(paren-locate "boundary/introspect/exports.ss")
EOF
# Output:
# boundary/introspect/exports.ss:46:1: error: unclosed '(' - never closed
# 3. The error is at line 46, column 1 - that's where the unclosed ( is!
# NOT at the end of the file where Scheme complained.
# 4. Fix and verify:
scheme -q <<'EOF'
(load "boundary/tools/paren-check.ss")
(paren-ok? "boundary/introspect/exports.ss")
EOF
# Output: #t
| Type | Message Pattern | Meaning |
|------|----------------|---------|
| unclosed | unclosed '(' - never closed | Opener at this location has no matching closer |
| extra-close | unexpected ')' - no matching opener | Closer with no corresponding opener |
| mismatch | opened '[' at line X, closed with ')' | Wrong bracket type used to close |
paren-locate(foo] style errors that pure counting missesboundary/tools/paren-check.ss - Load this to access all paren-checking functions.
Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer