Contributing to the SDK
The SDK powers every Strands agent: the agent loop, model integrations, tool execution, and streaming. When you fix a bug or improve performance here, you help every developer who uses Strands.
This guide covers contributing to the Python and TypeScript SDKs: what we accept, how to set up your development environment, and how to submit changes for review.
Find something to work on
Section titled “Find something to work on”Looking for a place to start? Check our issues labeled “ready for contribution”: these are well-defined and ready for community work.
Before starting work on any issue, check if someone is already assigned or working on it.
What we accept
Section titled “What we accept”We welcome contributions that improve the SDK for everyone. Focus on changes that benefit the entire community rather than solving niche use cases.
- Bug fixes with tests that verify the fix and prevent regression
- Performance improvements with benchmarks showing measurable gains
- Documentation improvements including docstrings, code examples, and guides
- Features that align with our roadmap and development tenets
- Small, focused changes that solve a specific problem clearly
What we don’t accept
Section titled “What we don’t accept”Some contributions don’t fit the core SDK. Understanding this upfront saves you time and helps us maintain focus on what matters most.
- Large refactors without prior discussion: Major architectural changes require a feature proposal
- Breaking changes without approval: We maintain backward compatibility carefully. Breaking changes require a feature proposal
- External tools: Build your own extension instead for full ownership
- Changes without tests: Tests ensure quality and prevent regressions (documentation changes excepted)
- Niche features: Features serving narrow use cases belong in extensions
If you’re unsure whether your contribution fits, open a discussion first.
Set up your development environment
Section titled “Set up your development environment”Setup differs between Python and TypeScript.
Clone the repository and enter the Python SDK directory:
git clone https://github.com/strands-agents/harness-sdk.gitcd harness-sdk/strands-pyWe use hatch for Python development. Hatch manages virtual environments, dependencies, testing, and formatting. Enter the virtual environment and install pre-commit hooks:
hatch shellpre-commit install -t pre-commit -t commit-msgThe pre-commit hooks run code formatters, linters, tests, and commit message validation before each commit.
Verify your setup by running the tests:
hatch test # Run unit testshatch test -c # Run with coverage reportYou can also run linters and formatters manually:
hatch fmt --linter # Check for code quality issueshatch fmt --formatter # Auto-format code with ruffTo run all quality checks at once (format, lint, and tests across every supported Python version), use the prepare script:
hatch run prepare # Run all checks before committingDevelopment tips:
- Use
hatch run test-integto run integration tests with real model providers - Run
hatch test --allto test across every supported Python version - Check CONTRIBUTING.md for the full development workflow
Clone the repository and install dependencies:
git clone https://github.com/strands-agents/harness-sdk.gitcd harness-sdknpm installThe TypeScript SDK uses npm for dependency management, with automated quality checks wired in through Husky git hooks. The prepare script installs those hooks:
npm run prepareVerify your setup by running all quality checks:
npm run check # Run all checks (lint, format, type-check, tests)You can also run individual checks:
npm test # Run unit testsnpm run type-check # TypeScript type checkingnpm run format # Format code with PrettierDevelopment tips:
- Use
npm run test:integto run integration tests - Run
npm run test:allto test in both Node.js and browser environments - Check CONTRIBUTING.md for the full development workflow
Submit your contribution
Section titled “Submit your contribution”After making your changes, submit them for review:
- Fork and create a branch with a descriptive name like
fix/session-memory-leakorfeat/add-hooks-support - Write tests for your changes: tests are required for all code changes
- Run quality checks before committing to ensure everything passes:
- Python:
hatch run prepare - TypeScript:
npm run check
- Python:
- Use conventional commits like
fix: resolve memory leak in session managerorfeat: add streaming support to tools - Submit a pull request referencing the issue number in the description
- Respond to feedback: we review within a few days and may request changes
The pre-commit hooks catch issues before you push, but you can also run checks manually.
Related guides
Section titled “Related guides”- Feature proposals: For significant features requiring discussion
- Team documentation: Our tenets, decisions, and API review process