All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
1.4.0 - 2026-05-20
- Upgrade OpenHands from v1.6.0 to v1.7.0 (#81)
- Upgraded OpenHands from v1.6.0 β v1.7.0, incorporating 296 commits and multiple SDK enhancements (v1.15.0 β v1.19.1).
- Removed deprecated V0 packages, simplifying deployment structure.
- Improved
llm_configfield compatibility for newer Bedrock inference profiles. - Fork updated:
custom/v1.7.0-fargate-r2(28 cherry-picked commits from v1.6.0).
- Adaptive thinking support for Claude Opus 4.7 on Bedrock (#83)
- Adds SDK Patch 34 (
patch_34_opus_47_adaptive_thinking) which rewrites kwargs inchat_options.pyfor Claude Opus 4.7 / Mythos Preview models so the Bedrock Converse API receivesthinking={"type":"adaptive"}plus top-leveloutput_config={"effort": ...}instead of the rejected legacythinking={"type":"enabled","budget_tokens":...}shape. - Without this fix, switching to
bedrock/global.anthropic.claude-opus-4-7failed withBedrockException - "thinking.type.enabled" is not supported for this model. - Other models (Sonnet 4.6/4.5, Haiku 4.5, Opus 4.5) keep the legacy extended-thinking path.
- Stop-gap pending upstream litellm support; tracks BerriAI/litellm #25957, #27168, #26334.
- Adds SDK Patch 34 (
- TC-035: Claude Adaptive-Thinking Models on Bedrock (#83)
- New E2E test case in
test/E2E_TEST_CASES.mdcovering adaptive-only Claude models. Closes the coverage gap that allowed the Opus 4.7 regression to ship in the v1.7.0 upgrade β TC-006 / TC-023 only ever exercised Sonnet 4.6 (default) and Haiku 4.5, both of which accept the legacythinking.type=enabledshape. - Asserts on
/openhands/sandboxCloudWatch logs (load-bearing β OpenHands retriesBadRequestError, so UI alone gives false confidence). Wired intotest/select-e2e-tests.shto auto-trigger on any change underdocker/agent-server-custom/.
- New E2E test case in
- Skills Refresh: autonomous-dev-team (#78)
- Re-installed and refreshed all autonomous-dev-team skills (
autonomous-common,autonomous-dev,autonomous-dispatcher,autonomous-review,create-issue) to their latest versions for enhanced workflow automation. - Added new
skillPathfield for future updates usingnpx skills update.
- Re-installed and refreshed all autonomous-dev-team skills (
- Hooks symlink for autonomous-dev SKILL.md frontmatter resolution (#75)
- Adds the
hooksβ.claude/skills/autonomous-common/hookssymlink convention so workflow hooks resolve correctly in both the main checkout and per-feature worktrees.
- Adds the
- Default LLM model is now
bedrock/global.anthropic.claude-sonnet-4-6(#82)- SDK Patch 33 changes the LLM Pydantic default from upstream
claude-sonnet-4-20250514(Anthropic direct API, requiresANTHROPIC_API_KEY) to the Bedrock cross-region inference profile. - Prevents fresh conversations with no
agent_settings.llm.modelfrom falling back to a model that requires an API key the deployment doesn't have, and from freezing that bad default intobase_state.jsonon EFS.
- SDK Patch 33 changes the LLM Pydantic default from upstream
- Pin Docker Base Image to Manifest Digest (#74)
- Updated Docker base image references (
openhands:1.6.0) to specificsha256digests, ensuring deterministic builds and avoiding stale cache issues.
- Updated Docker base image references (
- Upgrade GitHub Actions to Node.js 24 Versions (#80)
- Resolved deprecation warnings by updating GitHub Actions workflows (
checkout,setup-node,setup-python,github-script,upload-artifact) to latest Node.js 24-compatible versions.
- Resolved deprecation warnings by updating GitHub Actions workflows (
- Upgrade aws-cdk-lib to v2.248.0 (#68)
- Bumped
aws-cdk-libdependency, resolving npm audit findings:- High: ReDoS vulnerabilities in minimatch
<10.2.3.
- High: ReDoS vulnerabilities in minimatch
- Bumped
- Bump non-major dependencies to latest (#79)
- Routine npm dependency refresh.
- Tighten Rule 1 step 3 of
CLAUDE.md: explicit user instruction required for merge (#84)- Documents that CI / hook / review signals do not imply merge approval; only the user's explicit
merge/merge it(or equivalent) does.
- Documents that CI / hook / review signals do not imply merge approval; only the user's explicit
- Alpine Package Upgrades in Dockerfiles (#76, #77)
- Applied
apk upgrade --no-cacheto multiple Dockerfiles, patching critical CVEs in libraries (openssl, zlib, musl).
- Applied
- Force base image re-pull via
LAST_UPDATEDbump (#73)- Bumps the build-arg sentinel so CDK rebuilds the image and pulls the freshest base layer.
- Revert extra fork patches that broke the base image (#72)
- Restores a clean baseline after a regression introduced by a prior patch batch.
- Restore Missing Fork Patches (#70, #71)
- Added missing fork-specific files in
download-fork-patches.shto resolveImportErrorissues during container startup (skills/hooksAPI endpoints,settings.py).
- Added missing fork-specific files in
- Sync
settings.jsonwith autonomous-dev-team plugin hooks (#69)- Aligns the project hooks config with the upstream skills package after refresh.
1.3.0 - 2026-04-09
- Upgrade OpenHands from v1.4.0 to v1.6.0 (#65)
- Merged 341 upstream commits, upgrading the base OpenHands image, SDK (v1.11.5 β v1.15.0), and runtime.
- Removed custom
S3EventServicemodule β upstream v1.6.0 ships nativeAwsEventServicewith identical S3 path format, making the custom implementation redundant. - Updated
_build_service_urlpatch for new 3-arg signature in v1.6.0 (url, service_name, runtime_id). - Aligned orchestrator STATUS_MAP values with upstream expectations (
starting/errorinstead ofpending/failed). - Removed deprecated
send_telemetryconfig key (removed upstream in v1.6.0). - Fork:
custom/v1.6.0-fargate-r1(20 cherry-picked commits from v1.4.0 fork).
- Replace github-workflow skill with autonomous-dev-team (#66)
- Migrated from custom
github-workflowskill to upstream autonomous-dev-team skills. - New skills (
autonomous-dev,autonomous-review,autonomous-common,autonomous-dispatcher,create-issue) support Claude Code, Kiro CLI, and Codex agents. - Install via
npx skills add zxkane/autonomous-dev-team -s '*' -a claude-code -a kiro-cli -a codex -y.
- Migrated from custom
- Add retention-days to security scan artifacts (#64)
- Set
retention-days: 3on security scan artifact uploads to prevent GitHub Actions storage quota exhaustion (was defaulting to 90 days, causing 912 accumulated artifacts).
- Set
- Fixed npm CVEs: handlebars 4.7.9, fast-xml-parser 5.5.10, minimatch 10.2.5, picomatch 4.0.4, path-to-regexp 8.4.2, brace-expansion 5.0.5 (#65)
1.2.0 - 2026-03-11
- Startup timing instrumentation and SOCI support (#58)
- Added structured timing logs (
sandbox-startup-timing) to benchmark sandbox startup phases in/startand/resumeroutes. - Integrated SOCI v2 index generation via
soci convertfor Fargate lazy image loading (requiressociCLI >= v0.10). - Introduced
sandboxSociImageUriCDK context parameter for SOCI-enabled sandbox image override. - Exported sandbox image ECR URI as
CfnOutputfor SOCI index generation scripts.
- Added structured timing logs (
- Improved README for discoverability and engagement (#60)
- Restructured README to include a hero section, badges, and explicit value propositions.
- Transformed features list into an emoji-tagged Key Features section for easier scanning.
- Enhanced comparison tables and quick links for first-time visitor comprehension.
-
Correct VS Code port mapping from 60001 to 8001 (#62)
- Resolved 502 runtime subdomain errors caused by incorrect port mapping (
60001β8001) inpatch-exposed-urls.py. - Fixed
can_connect(ip, 60001)requests that failed to establish upstream connections due to mismatched port configurations in the agent-server SDK.
- Resolved 502 runtime subdomain errors caused by incorrect port mapping (
-
Preserve project/ path for nested repo git changes (#61)
- Corrected empty Changes tab for conversations linked to GitHub repositories.
- Updated
normalizeGitUrl()to preserveproject/<repo>paths for accurate nested repo resolution. - Removed unnecessary intermediate
git init /workspace/projectrepo creation shadowing actual repo changes.
-
Normalize git API paths for connected repos (#59)
- Fixed 500 errors in git Changes tab when connecting GitHub repositories to conversations.
- Adjusted
patch-fix.jsto properly normalize workspace paths containing nested repo directories.
1.1.0 - 2026-03-06
- S3 event persistence for conversations (#56)
- Introduced
S3EventServiceto replaceFilesystemEventServicewhenFILE_STORE=s3. - Persisted events to S3 for survival across Fargate task restarts and long-term history for archived conversations.
- Upgraded
openhands-toolsto v1.11.5 to resolve agent-server SDK mismatches.
- Introduced
- Conversation archival and lifecycle management (#54)
- Added ARCHIVED state for conversations with configurable retention policies.
- Supported user-initiated conversation deletion and data lifecycle transitions:
- ARCHIVED conversations retain event history in S3 but can no longer resume.
- Deleted conversations wipe all associated data.
-
Target tracking auto scaling and rightsizing of app Fargate tasks (#53)
- Downsized app Fargate tasks from 4 vCPU / 8 GB to 1 vCPU / 2 GB based on CloudWatch metrics.
- Implemented auto-scaling (1-3 tasks) for both the App and OpenResty services.
- Achieved ~75% reduction in baseline Fargate costs, reflected in updated README.md cost estimates.
-
Bedrock LLM model selection support (#49)
- Enabled user-selectable Bedrock LLM models via OpenHands model selection UI.
- Updated default model to Claude Sonnet 4.6 for optimal cost-performance balance.
- Updated documentation with AGENTS.md migration (#48)
- Consolidated tool-agnostic documentation into AGENTS.md, standardizing compatible AI coding tools.
- Added workflow enforcement hooks to prevent direct pushes to the main branch.
- Lambda Node.js runtime upgrade (#52)
- Migrated all custom AWS Lambda functions from
NODEJS_22_XtoNODEJS_24_X, the latest LTS runtime.
- Migrated all custom AWS Lambda functions from
- Orphan ECS task detection in idle monitor (#50)
- Implemented logic to detect and terminate orphan ECS tasks caused by race conditions during concurrent
/resumerequests.
- Implemented logic to detect and terminate orphan ECS tasks caused by race conditions during concurrent
- Bedrock improvements and patches for agent-server SDK (#51)
- Backported Bedrock updates and patches from OpenHands upstream forks.
- Resolved Kimi K2.5 max_output_tokens errors with custom SDK patch.
1.0.0 - 2026-02-28
- Per-conversation EFS access points for multi-tenant isolation (#36)
- Dynamically create EFS access points per conversation to enforce isolated filesystem access for sandbox containers.
- On sandbox
/startor/resume, EFS access points are created at/sandbox-workspace/<conversation_id>with uid/gid 1000.
-
Migration from EC2 to ECS Fargate for all services (#29)
- Eliminated dependency on EC2 instances, Launch Templates, and Auto Scaling Groups.
- Expanded architecture to 10 stacks, introducing a shared ECS cluster (ClusterStack).
- Migrated OpenHands app service to ECS Fargate task setup: 4 vCPU, 8 GB RAM.
- Migrated OpenResty proxy service: 0.25 vCPU, 512 MB RAM.
- ECS native secrets integration for
OH_SECRET_KEYandDB_PASS.
-
ECS Fargate sandbox orchestrator with Cloud Map service discovery (#28)
- Implemented a TypeScript-based Fastify orchestrator service for sandbox operations (RunTask, StopTask, DescribeTasks, cleanup stale records).
- Integrated private DNS resolution using Cloud Map (
orchestrator.openhands.local:8081). - Added EventBridge + Lambda-driven cleanup of stale ECS Tasks.
- Upgrade OpenHands to v1.4.0 (#30)
- Updated OpenHands runtime from 1.3.0 to 1.4.0 (63+ upstream commits merged).
- Upgraded Agent Server SDK from v1.8.1 to v1.11.4, including 13 custom patches.
- Improved E2E testing coverage with updated test cases reflecting ECS Fargate migration.
- GitHub Actions release process improvement (#46)
- Switched from default
GITHUB_TOKENto GitHub App token for triggering dependent workflows. - Ensures the
build-and-testCI workflow triggers correctly on release PRs.
- Switched from default
-
Bedrock model access for sandbox task role (#44)
- Added
bedrock:InvokeModelpermission to thesandboxTaskRoleto resolve access errors in production deployments.
- Added
-
Explicit creation of CloudWatch log groups in MonitoringStack (#43)
- Fixed OpenResty container startup failure due to missing CloudWatch log groups.
- Addressed incorrect assumption that ECS Fargate auto-creates log groups with the
awslogsdriver.
-
Skip parameters for conflicting VPC endpoints (#42)
- Added
skipDynamoDbEndpointandskipInterfaceEndpointsparameters to prevent conflicts during production deployments caused by pre-existing VPC endpoints.
- Added
- Remove self-referencing Sandbox Security Group rule (#34)
- Removed ingress rules allowing inter-sandbox communications on all TCP ports to enhance network isolation and security.
-
Resolved CVEs in system packages for all Docker images (#38)
- Upgraded system packages in OpenResty, App (OpenHands), and Sandbox images using
apt-getandapkcommands. - Addressed critical OS-level vulnerabilities flagged during reliability scans.
- Upgraded system packages in OpenResty, App (OpenHands), and Sandbox images using
-
Updated OpenResty base image for CVE remediation (#35)
- Migrated to
openresty/openresty:1.27.1.2-alpine-fatfrom1.25.3.1-alpine-fat.
- Migrated to
-
Fix sandbox status initialization on SPA navigation (#39)
- Patched sandbox auto-initialization for client-side navigation (
pushState/popstate) on the OpenHands dashboard.
- Patched sandbox auto-initialization for client-side navigation (
-
Register conversation with agent-server during resume (#31)
- Ensured conversations are registered with the agent-server API (
POST /api/conversations) after resuming sandboxes.
- Ensured conversations are registered with the agent-server API (
-
Handle
.gitownership issues on sandbox stop/resume (#32)- Addressed HTTP 500 errors caused by mismatched permissions in the
.gitworkspace folder during sandbox resume.
- Addressed HTTP 500 errors caused by mismatched permissions in the
- ECS Fargate architecture update (#37)
- Comprehensive restructuring of architecture documentation to match recent migration updates.
- Updated deployment prerequisites, stack details, and diagrams.
- Git worktree guidance added (#33)
- Enhanced
github-workflowskill with clear instructions and common error avoidance tips for using git worktrees efficiently.
- Enhanced
0.3.0 - 2026-02-14
- Automated release workflows integrated with LLM-generated changelogs (#26)
- Introduced two GitHub Actions workflows:
release-prepare.ymlfor manual release preparation with commit/PR enrichment and LLM-assisted changelog generation.release-publish.ymlfor automated version tagging and package publishing.
- Introduced two GitHub Actions workflows:
- OpenHands upgraded to v1.3.0 (#22)
- Upgraded from v1.2.1 with support for new upstream features:
- CORS environment variable
OH_ALLOW_CORS_ORIGINS_0for customizable origins. - Host network mode enabled via
OH_SANDBOX_USE_HOST_NETWORK=true.
- CORS environment variable
- Applied multi-tenant conversation isolation update (Patch 27) and webhook callback UUID + secret fixes (Patches 28/29).
- Upgraded from v1.2.1 with support for new upstream features:
- Replaced runtime regex patching with fork-based patches (#23):
- Deprecated
apply-patch.shwith 29 regex-based patches and introduced clean upstream modifications stored inzxkane/openhands@custom-v1.3.0-r1. - Consolidated patching process to Docker build time, reducing container startup complexity.
- Deprecated
- Fix for iPhone historical conversation messages (#24):
- Addressed viewport-specific React component remounts causing conversation history issues.
- Replaced synchronous DOM walking with
requestIdleCallback-based batched processing to improve performance. - Applied temporary React Fiber patch to resolve stuck skeleton loading state on mobile viewports.
- Added prerequisites for creating sandbox secret key before first-time deployment (#21):
- Updated README.md to include a required step for configuring the
sandbox secret key. - Prerequisites documented in
CLAUDE.mdwith accompanying CLI command examples.
- Updated README.md to include a required step for configuring the
0.2.0 - 2026-02-02
- Dynamic cost allocation tags via CDK context (#14)
STAGEtag auto-detected from domainName (test.*β staging, otherwise production)ProjectandPurposetags configurable via--contextparameters- All tags integrated with AWS Cost Allocation for billing visibility
- Runtime subdomain cookie access - Changed
SameSite=LaxtoSameSite=Nonein Lambda@Edge auth handler to enable cookies on cross-subdomain fetch requests (#16) - npm package vulnerabilities - Added override for
fast-xml-parserto v5.3.4 to fix GHSA-37qj-frw5-hhjh RangeError DoS bug (#18)
- Conversation resume after EC2 replacement - Pass
OH_SECRET_KEYto sandbox containers via Secrets Manager for encrypted secrets decryption (#17) - Bedrock token expiration - Fixed by using EC2 instance role instead of sandbox STS credentials for LLM calls (#17)
- MCP server deduplication - Intercept XMLHttpRequest instead of fetch to prevent global MCP servers from being duplicated in user settings (#15)
- Global MCP server protection - Disable Edit/Delete buttons for system-managed MCP servers defined in config.toml (#15)
0.1.0 - 2026-01-29
- AuthStack - Cognito User Pool with OAuth2, managed login, and custom email templates
- NetworkStack - VPC configuration with endpoints for AWS services
- SecurityStack - KMS keys, IAM roles, security groups
- MonitoringStack - CloudWatch dashboards, alarms, S3 data bucket
- DatabaseStack - Aurora Serverless v2 PostgreSQL with RDS Proxy
- UserConfigStack - User configuration API (Lambda) for multi-tenant MCP management
- ComputeStack - EC2 Auto Scaling with Graviton (ARM64) instances
- EdgeStack - CloudFront distribution, Lambda@Edge handlers, WAF rules
- Cognito authentication with 30-day sessions
- Silent token refresh using refresh_token (#11)
- Logout button patch for Cognito authentication (#9)
- Custom Cognito email templates for OpenHands branding (#8)
- Cross-user authorization for runtime requests (#1)
- Multi-domain Cognito callback URL support (#2, #6)
- WAF protection on CloudFront
- Origin verification headers (direct ALB access blocked)
- VPC Endpoints for AWS services
- KMS encryption for secrets
- Runtime subdomain routing for user applications
- VS Code URL rewriting for proper subdomain access
- Sandbox AWS access with scoped IAM credentials (#7)
- AWS CLI included in agent-server image (#7)
- Archived conversation resume after EC2 replacement (#3)
- Self-healing architecture with S3 + EFS persistence
- User configuration API for multi-tenant MCP management (#10)
- Per-user MCP server configuration
- Encrypted secrets storage with KMS
- GitHub and Slack integrations support
- AWS Documentation MCP server (shttp)
- Chrome DevTools MCP server (stdio) with correct args (#4)
- GitHub workflow skill with 10-step development process (#12)
- Support for multiple reviewer bots (Amazon Q, Codex)
- PR checklist template and update requirements
- Comprehensive E2E test cases documentation
- OpenHands skills integration (#5)
- CI workflow with security scanning (#3)
| Component | Technology |
|---|---|
| Compute | EC2 m7g.xlarge (Graviton ARM64) |
| Database | Aurora Serverless v2 PostgreSQL |
| CDN | CloudFront with Lambda@Edge |
| Auth | Cognito User Pool (OAuth2) |
| Storage | S3 (data) + EFS (workspaces) |
| Container | Docker with Watchtower auto-updates |
| Proxy | OpenResty for runtime routing |