| title | Contributing |
|---|---|
| id | contributing |
If you have questions about implementation details, help or support, then please use our dedicated community forum at Github Discussions PLEASE NOTE: If you choose to instead open an issue for your question, your issue will be immediately closed and redirected to the forum.
If you have found what you think is a bug, please file an issue. PLEASE NOTE: Issues that are identified as implementation questions or non-issues will be immediately closed and redirected to Github Discussions
If you are here to suggest a feature, first create an issue if it does not already exist. From there, we will discuss use-cases for the feature and then finally discuss how it could be implemented.
Before proceeding with development, ensure you match one of the following criteria:
- Fixing a small bug
- Fixing a larger issue that has been previously discussed and agreed-upon by maintainers
- Adding a new feature that has been previously discussed and agreed-upon by maintainers
- Fork this repository, we prefer the
feat-*branch name style - Ensure you have
pnpminstalled - Install projects dependencies and linkages by running
pnpm install - Auto-build files as you edit by running
pnpm dev - Auto-test files as you edit by running
pnpm test:lib:devin a second terminal - Implement your changes and tests
- To test in your own projects:
- Build/watch for changes with
pnpm build/pnpm dev
- Build/watch for changes with
- Document your changes in the appropriate documentation website markdown pages
- Run
pnpm test:libfor the fast unit test loop - Run
pnpm build:allbefore you run the integration tests inpackages/intent/tests/integrationdirectly. They run the builtdist/cli.mjsagainst a local Verdaccio registry - Run
pnpm testto ensure all tests pass before committing - Create a changeset (changelog entry) for your changes by running
pnpm changeset - Commit your work and open a pull request
- Submit PR for review
- Follow the Agent Skills authoring best practices. Apply their concepts in the shipped procedure rather than telling library maintainers to load another writing guide.
- Put supported tasks, activation conditions, and adjacent-task boundaries in
description. Start the body with the procedure; keep execution prerequisites and conditional reference pointers there instead of repeating skill-selection criteria. - Give each reference a reading condition and each workflow an observable completion check. Preserve necessary failure handling, complete examples, and source-backed constraints when removing repetition.
- Keep the shared Agent Skills format separate from Intent extensions and host-specific controls. Verify packaged references and real task behavior; structural validation alone does not establish useful guidance.
Before releasing distribution changes, run the explicit compatibility gate from the repository root with paths to installed executables:
INTENT_GH_SKILL_BIN=/path/to/gh INTENT_SKILLS_BIN=/path/to/skills INTENT_CLAUDE_BIN=/path/to/claude pnpm --dir packages/intent run test:distributionThe gate rebuilds Intent, requires all three executables, and runs all cases in the installer test. Missing configuration fails instead of skipping checks. Verified tool versions are GitHub CLI 2.100.0, skills 1.5.25, and Claude Code 2.1.268; record versions when testing other releases.
- Local fixture: two package-owned skills, an explicitly selected prerequisite, excluded root and package skills, bundled references, executable helpers, and
gh skill publish --dry-run. - Native Claude: manifest validation, selected component discovery, installation, versioned updates, maintainer opt-out, and consumer uninstall. An isolated home and environment keep credentials and personal settings out; the check calls no model.
- Remote TanStack AI: two package skills registered from a fixed snapshot, then installed through generated commands. One case uses each installer's default revision; the other pins the snapshot and verifies its frontmatter survives. Both check selected names and nested guidance. Network access is required; installation telemetry is disabled.
Ordinary tests keep external checks optional. When running the test file directly, set both installer variables for the local fixture, INTENT_CLAUDE_BIN for native Claude checks, and INTENT_DISTRIBUTION_REMOTE=1 for remote cases. Use test:distribution for a release result that cannot omit these cases.
Cursor acceptance and agent task quality remain separate gates. In a disposable Cursor profile, check selected components, references, updates, and removal through its native plugin flow. Run a real consumer task against supported dependency versions, and record unavailable hosts or missing task evidence as incomplete. The automated gate does not establish cross-host task correctness.