leanspec-development
LeanSpec Development Skill
Unified guide for all LeanSpec development: coding, commands, publishing, CI/CD, and runner research.
Quick Navigation
| Goal | Reference |
|---|---|
| Mandatory rules & conventions | RULES.md |
| Changelog format & workflow | Changelog (below) |
| i18n file locations & patterns | I18N.md |
| Monorepo structure & packages | STRUCTURE.md |
| Full release checklist | PUBLISHING.md |
| npm distribution architecture | NPM-DISTRIBUTION.md |
| Dev publishing workflow | DEV-PUBLISHING.md |
| CI workflow details | CI-WORKFLOWS.md |
| gh CLI command reference | CI-COMMANDS.md |
| CI troubleshooting | CI-TROUBLESHOOTING.md |
| Runner ecosystem catalog | runners-catalog.md |
Core Principles
- Use pnpm — Never npm or yarn
- DRY — Extract shared logic, avoid duplication
- Test What Matters — Business logic and data integrity, not presentation
- Leverage Turborepo — Smart caching (19s → 126ms builds)
- i18n is MANDATORY — Every user-facing string needs both en AND zh-CN (see I18N.md)
- Follow Rust Quality — All code must pass
cargo clippy -- -D warnings
Commands
Daily Development
pnpm install # Install dependencies
pnpm dev # Start web UI + Rust HTTP server
pnpm dev:watch # Same + auto-rebuild Rust on changes
pnpm dev:web # Start web UI only
pnpm dev:desktop # Start desktop app
pnpm build # Build all TS packages
pnpm build:rust # Build Rust (debug)
pnpm build:rust:release # Build Rust (release)
pnpm typecheck # ← NEVER SKIP before marking work complete
pnpm test # Run all tests
pnpm test:watch # Watch mode
pnpm test:coverage # With coverage
pnpm test:rust # Rust tests only
pnpm format # Format all code
pnpm cli # Run LeanSpec CLI
Validation
pnpm pre-push # Quick: typecheck + clippy
pnpm pre-release # Full: build + typecheck + test + lint
⚠️ Always run pnpm typecheck before marking work complete.
Rust
pnpm build:rust # Debug build
pnpm build:rust:release # Release build
pnpm check:rust # Quick check without building
pnpm lint:rust # Clippy with warnings as errors
pnpm format:rust # Format Rust code
pnpm format:rust:check # Check Rust formatting
# Low-level
cargo build --manifest-path rust/Cargo.toml
node scripts/copy-rust-binaries.mjs --debug
Documentation
pnpm docs:dev # Start docs dev server
pnpm docs:build # Build docs site
Desktop
pnpm dev:desktop # Start desktop app in dev mode
cd packages/desktop
pnpm bundle:linux # Debian package
pnpm bundle:macos # DMG
pnpm bundle:windows # NSIS installer
Critical Rules
Rules enforced by hooks or CI:
- Light/Dark Theme — ALL UI must support both themes
- i18n — Update BOTH en and zh-CN → I18N.md ⚠️ commonly forgotten
- Regression Tests — Bug fixes MUST include failing-then-passing tests
- Rust Quality — Must pass
cargo clippy -- -D warnings - Rust Params Structs — Functions with >7 args must use a params struct (enforced by
clippy.toml) - Use shadcn/ui — No native HTML form elements
- cursor-pointer — All clickable items must use
cursor-pointer
See RULES.md for complete requirements.
Publishing & Releases
Production Release (Recommended)
# 1. Update version (root only)
npm version patch # or minor/major
# 2. Sync all packages
pnpm sync-versions
# 3. Validate everything
pnpm pre-release
# 4. Commit and push with tags
git add .
git commit -m "chore: release vX.X.X"
git push --follow-tags
# 5. Create GitHub Release (triggers publish workflow)
gh release create vX.X.X --title "vX.X.X" --notes "Release notes here"
Development Release
# Publish dev version via GitHub Actions
gh workflow run publish.yml --field dev=true
# Dry run (validates without publishing)
gh workflow run publish.yml --field dev=true --field dry_run=true
# Install and test
npm install -g lean-spec@dev
lean-spec --version
Version Management
- Root
package.jsonis the single source of truth for versions pnpm sync-versionspropagates to all packages (including Rust crates)- CI automatically validates version alignment
- Never manually edit package versions — use
npm version+pnpm sync-versions
Distribution Architecture
LeanSpec uses optional dependencies for platform-specific Rust binaries:
| Type | Packages |
|---|---|
| Main (published) | lean-spec, @leanspec/mcp, @leanspec/ui |
| Platform (published) | @leanspec/cli-{platform}, @leanspec/mcp-{platform} (5 platforms each) |
| Internal (not published) | @leanspec/desktop, @leanspec/ui-components |
⚠️ Platform packages MUST be published before main packages. The CI workflow handles this automatically.
See PUBLISHING.md and NPM-DISTRIBUTION.md for details.
Changelog
Update CHANGELOG.md following Keep a Changelog format and Semantic Versioning.
Discovering Changes
# Commits since last tag
git log $(git describe --tags --abbrev=0)..HEAD --oneline
# Files changed since last release
git diff $(git describe --tags --abbrev=0)..HEAD --stat
Entry Format
Only include shipped/implemented changes — not planned specs, drafts, or WIP.
Add under ## [Unreleased] using these categories: Added, Changed, Fixed, Deprecated, Removed, Security, Technical.
- **Feature Name** ([spec 123](https://web.lean-spec.dev/specs/123)) - Brief description
- Sub-bullet with implementation details
Writing Style
- Bold feature name followed by description
- Link related specs when applicable
- Present tense — "Adds support for..." not "Added"
- Be specific — include command names, flag names, component names
- Group related changes under single bullet with sub-bullets
- Include breaking changes with Breaking: prefix
Creating a Release
- Move entries from
[Unreleased]to new version:## [X.Y.Z] - YYYY-MM-DD - Add release link at bottom:
[X.Y.Z]: https://github.com/codervisor/lean-spec/releases/tag/vX.Y.Z
CI/CD (GitHub Actions)
All workflow interactions use the gh CLI. Check status before triggering new runs; minimum 30s between polls.
Available Workflows
| Workflow | File | Triggers | Purpose |
|---|---|---|---|
| CI | ci.yml |
push, PR to main | Build, test, lint (Node.js + Rust) |
| Publish | publish.yml |
release, manual | Publish to npm (all platforms) |
| Desktop Build | desktop-build.yml |
push, PR, manual | Build Tauri desktop apps |
| Copilot Setup | copilot-setup-steps.yml |
push, PR, manual | Setup environment for Copilot agent |
Quick Reference
# Check status
gh run list --limit 10
gh run list --workflow ci.yml --limit 5
gh run view <run-id>
gh run watch <run-id>
# Trigger
gh workflow run ci.yml
gh workflow run publish.yml --field dev=true
# Debug failures
gh run view <run-id> --log-failed
gh run rerun <run-id> --failed
# Artifacts
gh run download <run-id>
gh run download <run-id> --name ui-dist
See CI-WORKFLOWS.md, CI-COMMANDS.md, and CI-TROUBLESHOOTING.md for details.
Runner Research
Research AI agent runners to keep LeanSpec's runner registry current as the ecosystem evolves.
Workflow
- Read current state:
rust/leanspec-core/src/sessions/runner.rs(RunnerRegistry::builtins()) - Read catalog: runners-catalog.md
- Research via
web_search: Config format changes, CLI changes, new env vars, new capabilities, deprecations, new runners - Compare & identify gaps: Cross-reference findings against registry
- Report: Minor updates → update catalog directly; major changes → create a spec
Runner Tiers
- Tier 1 (high priority): Claude Code, Copilot, Cursor, Windsurf, Codex, Gemini
- Tier 2 (medium): Kiro, Amp, Aider, Goose, Continue, Roo Code
- Tier 3 (monitor): Droid, Kimi, Qodo, Trae, Qwen Code, OpenHands, Crush, CodeBuddy, Kilo, Augment
Key Source Files
| File | Purpose |
|---|---|
rust/leanspec-core/src/sessions/runner.rs |
Runner registry with detection config |
schemas/runners.json |
JSON schema for custom runner config |
packages/cli/templates/_shared/agents-components/ |
AGENTS.md template components |
More from codervisor/lean-spec
agent-browser
Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to "open a website", "fill out a form", "click a button", "take a screenshot", "scrape data from a page", "test this web app", "login to a site", "automate browser actions", or any task requiring programmatic web interaction.
49watch-ci
Watch GitHub Actions CI status for the current commit until completion. Use after pushing changes to monitor build results.
35github-integration
>
35parallel-worktrees
>
35leanspec-sdd
Spec-Driven Development methodology for AI-assisted development. Use when working with specs, planning features, creating/implementing/refining/organizing specs, checking progress, updating specs, task breakdowns, design decisions, or any task involving a specs/ folder or .lean-spec/config.json.
16runner-research
Research AI agent runners/platforms (Claude Code, Copilot, Cursor, Windsurf, Codex, Kiro, Gemini, Amp, Goose, etc.) to track config format changes, new capabilities, deprecations, and emerging runners. Use when asked to "research runners", "check for runner updates", "audit runner compatibility", or when preparing to update the runner registry. Triggers include questions about runner config formats, new runner releases, or keeping LeanSpec runner support current.
4