{"id":50660061,"url":"https://github.com/effectorHQ/skill-lint","last_synced_at":"2026-06-24T23:00:24.887Z","repository":{"id":342131985,"uuid":"1172953806","full_name":"effectorHQ/skill-lint","owner":"effectorHQ","description":"Lint and validate SKILL.md files — npx @effectorhq/skill-lint","archived":true,"fork":false,"pushed_at":"2026-03-29T07:47:47.000Z","size":97,"stargazers_count":0,"open_issues_count":2,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-04T10:26:27.081Z","etag":null,"topics":["cli","effector","linter","typed-tools"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/effectorHQ.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-04T21:34:21.000Z","updated_at":"2026-03-29T07:48:18.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/effectorHQ/skill-lint","commit_stats":null,"previous_names":["openclawhq/skill-lint","effectorhq/skill-lint"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/effectorHQ/skill-lint","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/effectorHQ%2Fskill-lint","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/effectorHQ%2Fskill-lint/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/effectorHQ%2Fskill-lint/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/effectorHQ%2Fskill-lint/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/effectorHQ","download_url":"https://codeload.github.com/effectorHQ/skill-lint/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/effectorHQ%2Fskill-lint/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34752465,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-24T02:00:07.484Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","effector","linter","typed-tools"],"created_at":"2026-06-08T02:00:39.489Z","updated_at":"2026-06-24T23:00:24.878Z","avatar_url":"https://github.com/effectorHQ.png","language":"JavaScript","funding_links":[],"categories":["OpenClaw Ecosystem"],"sub_categories":[],"readme":"\u003e **📦 Consolidated.** This package is now part of [`effectorHQ/effector`](https://github.com/OpenClawHQ/effectorhq) → `packages/lint/`.\n\u003e All active development continues in the monorepo. This repository remains available for reference.\n\u003e\n\u003e Linting is now integrated into `effector check .` via the unified CLI.\n\n---\n\n# skill-lint\n\n[![npm](https://img.shields.io/npm/v/@effectorhq/skill-lint?color=E03E3E\u0026logo=npm\u0026logoColor=white)](https://www.npmjs.com/package/@effectorhq/skill-lint) [![Status: Beta](https://img.shields.io/badge/status-beta-yellow)](https://github.com/effectorHQ/REPO-TIERS.md) [![CI](https://github.com/effectorHQ/skill-lint/actions/workflows/ci.yml/badge.svg)](https://github.com/effectorHQ/skill-lint/actions) [![Node.js ≥ 18](https://img.shields.io/badge/node-%3E%3D18-339933?logo=nodedotjs\u0026logoColor=white)](https://nodejs.org) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/effectorHQ/.github/blob/main/CONTRIBUTING.md)\n\n**[中文文档 →](./README.zh.md)**\n\nA lightweight Node.js CLI tool for linting and validating effector SKILL.md files before publishing to ClawHub.\n\n## Overview\n\n`skill-lint` ensures that your effector skills follow best practices and are ready for publication. It validates SKILL.md file structure, required fields, metadata completeness, and markdown content quality.\n\n## Features\n\n- **Frontmatter Validation** - Checks YAML structure and required fields (name, description)\n- **Metadata Inspection** - Validates metadata.openclaw structure and installation methods\n- **Installation Validation** - Ensures install entries have correct format (brew, apt, manual, npm, pip)\n- **Content Validation** - Checks markdown body for required sections (Purpose, When to Use, Setup)\n- **Emoji Validation** - Warns if display emoji is missing for better ClawHub discoverability\n- **Description Quality** - Validates description length (20-200 chars) for clarity\n- **Colored Output** - Human-readable terminal output with errors, warnings, and info\n- **JSON Output** - Machine-readable JSON output with `--json` flag\n- **No External Dependencies** - Built with Node.js built-ins only\n\n## Install\n\n```bash\nnpm install @effectorhq/skill-lint\n```\n\nYou can also use the CLI directly without installing globally:\n\n```bash\nnpx @effectorhq/skill-lint .\nnpx @effectorhq/skill-lint ./path/to/SKILL.md\n```\n\nSee the published package on npm: **https://www.npmjs.com/package/@effectorhq/skill-lint**\n\n## Usage\n\n### Basic Validation\n\nValidate a SKILL.md file in the current directory:\n\n```bash\nskill-lint\n```\n\nValidate a specific file:\n\n```bash\nskill-lint path/to/SKILL.md\n```\n\n### Options\n\n```\n-h, --help         Show help message\n-v, --version      Show version number\n-q, --quiet        Suppress info messages (errors and warnings only)\n--json             Output results as JSON for programmatic use\n```\n\n### Examples\n\nValidate with minimal output:\n\n```bash\nskill-lint -q SKILL.md\n```\n\nGet JSON output for CI/CD integration:\n\n```bash\nskill-lint --json path/to/SKILL.md\n```\n\n## Validation Rules\n\n### Errors (must fix before publishing)\n\n- **required-fields** - Missing `name` or `description` in frontmatter\n- **install-missing-id** - Install method missing required `id` field\n- **install-missing-kind** - Install method missing required `kind` field\n- **install-no-target** - Install method missing target (formula/package/steps)\n- **install-missing-formula** - Brew install method requires `formula` field\n- **install-missing-package** - APT install method requires `package` field\n- **install-missing-steps** - Manual install method requires `steps` array\n\n### Warnings (recommended to fix)\n\n- **name-format** - Skill name should be kebab-case (e.g., `my-skill`, not `MySkill`)\n- **name-length** - Skill name longer than 50 characters\n- **description-length** - Description shorter than 20 or longer than 200 characters\n- **description-format** - Description should start with capital letter\n- **missing-emoji** - No emoji in metadata.openclaw.emoji\n- **emoji-format** - Emoji should be a single character\n- **install-invalid-kind** - Install kind is not one of: brew, apt, manual, npm, pip\n- **missing-sections** - Body missing recommended sections (Purpose, When to Use, Setup)\n- **empty-body** - Skill description body is empty\n- **no-install** - No installation methods specified\n- **no-examples** - Consider adding Examples section\n\n### Info Messages (best practices)\n\n- **metadata-structure** - Consider adding metadata.openclaw section\n- **no-examples** - Consider adding Examples section with usage patterns\n\n## SKILL.md Format\n\nA valid SKILL.md file requires:\n\n```yaml\n---\nname: skill-name\ndescription: \"Brief description of what this skill does\"\n\n# Optional: Extended metadata for ClawHub\nmetadata:\n  openclaw:\n    emoji: 🔧\n    requires:\n      bins:\n        - required-binary\n      env:\n        - REQUIRED_ENV_VAR\n    install:\n      - id: brew\n        kind: brew\n        formula: package-name\n        label: \"Install via Homebrew\"\n      - id: manual\n        kind: manual\n        label: \"Manual installation\"\n        steps:\n          - \"Step 1\"\n          - \"Step 2\"\n---\n\n## Purpose\n\nDescribe what this skill does and its primary use cases.\n\n## When to Use\n\nExplain scenarios where this skill is appropriate.\n\n## When NOT to Use\n\nExplain scenarios where alternatives would be better.\n\n## Setup\n\nInstallation and configuration instructions.\n\n### Prerequisites\n\nList required tools and dependencies.\n\n### Local Testing\n\nHow to install and test the skill locally.\n\n## Commands / Actions\n\nList and describe available commands.\n\n## Examples\n\nProvide copy-paste-ready usage examples.\n\n## Notes\n\n- **Limitations**: Known limitations and edge cases\n- **Performance**: Expected performance characteristics\n- **Troubleshooting**: Common issues and solutions\n- **Security**: Security considerations for API keys, etc.\n```\n\n## Exit Codes\n\n- `0` - No errors found (warnings and info may still be present)\n- `1` - One or more errors found\n\n## Integration Examples\n\n### Pre-commit Hook\n\nAdd to `.git/hooks/pre-commit`:\n\n```bash\n#!/bin/bash\nskill-lint SKILL.md || exit 1\n```\n\n### GitHub Actions\n\nAdd to `.github/workflows/validate.yml`:\n\n```yaml\nname: Validate SKILL.md\non: [push, pull_request]\n\njobs:\n  lint:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: actions/setup-node@v4\n      - run: npm install -g @effectorhq/skill-lint\n      - run: skill-lint SKILL.md\n```\n\n### npm script\n\nAdd to `package.json`:\n\n```json\n{\n  \"scripts\": {\n    \"validate\": \"skill-lint SKILL.md\"\n  }\n}\n```\n\n## Development\n\n### Project Structure\n\n```\n.\n├── bin/\n│   └── skill-lint.js        # CLI entry point\n├── src/\n│   ├── parser.js            # SKILL.md parser\n│   ├── rules.js             # Validation rules\n│   └── reporter.js          # Output formatting\n├── test/\n│   ├── parser.test.js       # Parser tests\n│   ├── rules.test.js        # Rules tests\n│   ├── reporter.test.js     # Reporter tests\n│   ├── integration.test.js  # Integration tests\n│   └── fixtures/            # Test fixtures\n├── package.json\n└── README.md\n```\n\n### Running Tests\n\n```bash\nnpm test\n```\n\nAll tests use Node.js built-in `test` runner (Node 18+).\n\n### Adding New Rules\n\n1. Add validation function to `src/rules.js`\n2. Add tests in `test/rules.test.js`\n3. Update README with rule documentation\n4. Run tests to verify: `npm test`\n\n## Future Enhancements\n\n- Auto-fix capabilities for common issues\n- Support for skill templates and scaffolding\n- Integration with ClawHub API for pre-publish checks\n- Custom rule configuration\n- Multiple file validation\n- Watch mode for development\n\n## Contributing\n\nContributions welcome! Please:\n\n1. Fork the repository\n2. Create a feature branch\n3. Add tests for new functionality\n4. Ensure all tests pass: `npm test`\n5. Submit a pull request\n\n## License\n\nThis project is currently licensed under the [Apache License, Version 2.0](LICENSE.md) 。\n\n## Links\n\n- [OpenClaw](https://github.com/openclaw/openclaw) - Main project\n- [ClawHub](https://clawhub.com) - Official skill registry\n- [SKILL.md Specification](https://github.com/openclaw/openclaw/docs/SKILL.md) - Full format documentation\n\n---\n\nBuilt by effectorHQ. We move first.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FeffectorHQ%2Fskill-lint","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FeffectorHQ%2Fskill-lint","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FeffectorHQ%2Fskill-lint/lists"}