Skip to content

Releases: OpenHands/software-agent-sdk

v1.9.1

21 Jan 22:53

Choose a tag to compare

What's Changed

Full Changelog: v1.9.0...v1.9.1

v1.9.0

21 Jan 17:34

Choose a tag to compare

Added support for experimental critic model

critic-demo.mp4

What's Changed

  • Propagate Datadog conversation logging flag to evaluation dispatch by @simonrosenberg in #1703
  • Release v1.8.2 by @all-hands-bot in #1722
  • Add swebenchmultimodal support to run-eval workflow by @juanmichelini in #1659
  • feat: add multiswebench support to run-eval workflow by @juanmichelini in #1693
  • feat: load skills from agent server by @hieptl in #1729
  • Add GPT-5.2 high reasoning to model configurations by @neubig in #1735
  • Replace mocked MCP tests with real integration tests by @neubig in #1678
  • feat(plugin): Add Plugin.fetch() for remote plugin fetching and caching by @jpshackelford in #1647
  • Fix event ordering in RemoteEventsList by inserting events sorted by timestamp by @neubig in #1737
  • fix: move async operations outside sync lock in event subscription by @neubig in #1732
  • Remove unsupported models by @simonrosenberg in #1734
  • refactor(hooks): add typed fields to HookConfig for better type safety by @xingyaoww in #1726
  • Add Marketplace datamodel for marketplace.json support by @neubig in #1744
  • Remove push_to_index option from run-eval.yml workflow by @juanmichelini in #1750
  • feat: add Gemini 3 models to reasoning effort supported list by @Chesars in #1752
  • Fix DiscriminatedUnionEnvParser to use single parser when only one kind exists by @tofarr in #1741
  • Add GitHub repository URLs to PyPI package metadata by @xingyaoww in #1753
  • Fix cache tag truncation with ports and latest suffix by @simonrosenberg in #1626
  • docs: rewrite CONTRIBUTING around SDK architecture by @enyst in #1755
  • Fix CORS to allow DOCKER_HOST_ADDR for remote browser access by @shanemort1982 in #1466
  • refactor(examples): use .from_dict() for hooks example by @xingyaoww in #1746
  • fix: Add JSON formatter for uvicorn access logs by @neubig in #1733
  • Fix unhandled ConversationRunError causing non-JSON logs by @neubig in #1680
  • remove gpt-5-mini from list of models to evaluate for openhands index by @simonrosenberg in #1766
  • Add API-Based Critic for Real-Time Agent Action Evaluation (Experimental) by @xingyaoww in #1269
  • feat: Add .pr/ directory convention and auto-cleanup workflow by @jpshackelford in #1764
  • feat(delegate): Add create_sub_visualizer method for custom sub-agent visualization by @malhotra5 in #1767
  • Add minimax/MiniMax-M2.1 to resolve_model_config.py by @juanmichelini in #1757
  • feat: Support full class names in DiscriminatedUnionEnvParser by @tofarr in #1768
  • Update idle time on bash, git, and file operations by @neubig in #1770
  • Add set_security_analyzer abstract method to BaseConversation by @malhotra5 in #1772

New Contributors

Full Changelog: v1.8.2...v1.9.0

v1.8.2

14 Jan 14:59

Choose a tag to compare

What's Changed

  • Release v1.8.1 by @all-hands-bot in #1670
  • feat: auto-trigger PR review on new ready-for-review PRs + fix duplicate comments by @xingyaoww in #1669
  • Add --no-pager instruction for git commands in system prompt by @xingyaoww in #1673
  • fix: mask LLM_API_KEY and GITHUB_TOKEN secrets in PR review agent by @xingyaoww in #1675
  • Add per-test timeout to prevent hanging example scripts by @xingyaoww in #1666
  • Fix PR review agent multi-line suggestion alignment by @xingyaoww in #1677
  • Add visualize() for ConversationErrorEvent by @enyst in #1686
  • Fix useless logging in sockets.py by @neubig in #1679
  • Fix conversation restore failing due to secret serialization/deserialization mismatch by @tofarr in #1672
  • fix(critic): Accept MessageEvent as valid finish signal in AgentFinishedCritic by @neubig in #1695
  • fix: add file-based locking to EventLog.append() by @ixchio in #1614
  • feat(pr-review): Add priority labels to review comments by @xingyaoww in #1696
  • feat: support custom volumes mounting for DockerWorkspace by @Co1lin in #1618
  • Add AGENTS.md and link repo.md by @enyst in #1690
  • Condenser integration tests by @csmith49 in #1652
  • Fix: Disable streaming for sub-agents in delegate tool by @malhotra5 in #1705
  • Fix deepseek-v3.2-reasoner model name to use valid API identifier by @neubig in #1707
  • fix(condenser): Forgetting range calculation interprets keep_first correctly by @csmith49 in #1708
  • llm: log failed Responses calls with request context by @enyst in #1684
  • Fix verify method to include builtin tools in event check by @malhotra5 in #1710
  • Optimize docker-like behaviour in apptainer with better code quality by @adityasoni9998 in #1711
  • Remove .openhands/skills/repo.md symlink by @enyst in #1709
  • Add crash diagnostics logging to agent server by @neubig in #1689
  • Fix PR review bot to diff against current base commit by @enyst in #1685
  • Add ARG USERNAME to base-image stage for podman by @cbagwell in #1691
  • Revert "fix(critic): Accept MessageEvent as valid finish signal in AgentFinishedCritic" by @xingyaoww in #1715
  • Add configurable startup wait for APIRemoteWorkspace by @simonrosenberg in #1713
  • Add user tracking to evaluation workflow by @juanmichelini in #1716
  • fix: route qwen-3-coder through Fireworks provider by @neubig in #1720

New Contributors

Full Changelog: v1.8.1...v1.8.2

v1.8.1

09 Jan 16:55

Choose a tag to compare

Fix the failed PyPI release on v1.8.0

What's Changed

Full Changelog: v1.8.0...v1.8.1

v1.8.0

09 Jan 15:58

Choose a tag to compare

Major Feature

What's Changed

  • Add push_to_index dispatch flag by @simonrosenberg in #1588
  • feat: support .mcp.json for MCP server configuration by @neubig in #1481
  • Release v1.7.4 by @all-hands-bot in #1595
  • feat: support resource directories (scripts/, references/, assets/) by @neubig in #1482
  • Fix stats being reset when resuming a conversation by @xingyaoww in #1591
  • Add dynamic run name title to Run Eval workflow by @juanmichelini in #1612
  • refactor: remove reconciliation methods, use runtime agent directly by @enyst in #1542
  • fix(git): skip remote check for repos with no commits by @neubig in #1606
  • Add code review microagent based on xingyaoww's review history by @xingyaoww in #1150
  • feat(sdk): complete hooks implementation with additional context and stop hook by @ak684 in #1547
  • feat: Add Plugin data model and basic loading from directories by @neubig in #1611
  • feat: Add plugin loading example demonstrating skills, hooks, and MCP by @neubig in #1616
  • Expose runtime_resource_factor in run-eval by @simonrosenberg in #1605
  • feat: add skill validation improvements by @neubig in #1597
  • Add skills support to PR review example with /codereview and /codereview-roasted by @xingyaoww in #1617
  • feat: add to_prompt() for XML skill prompt generation by @neubig in #1483
  • Fix poetry lock command for Poetry 2.x compatibility by @xingyaoww in #1622
  • feat: Add skills example and include skill location in agent prompt by @neubig in #1599
  • Multi-step integration tests by @csmith49 in #1613
  • Add action summary feature for tool calls by @xingyaoww in #1339
  • Add expected index models to resolve_model_config.py by @juanmichelini in #1497
  • Revert "Expose runtime_resource_factor in run-eval" by @simonrosenberg in #1627
  • fix: resolve UnsupportedFieldAttributeWarning for secret_registry field by @neubig in #1625
  • Fix context window displaying as 0 when resuming conversation by @xingyaoww in #1590
  • fix: Update PR review workflow to use correct repository name by @xingyaoww in #1623
  • Fix AGENTS.md not being loaded when skills directories don't exist by @xingyaoww in #1624
  • fix: Pass agent_context at Agent initialization in PR review script by @xingyaoww in #1632
  • Allow over-riding system-level configurations from apptainer.conf in apptainer workspace by @adityasoni9998 in #1628
  • feat(llm): Set default LLM timeout to 5 minutes (300s) by @neubig in #1638
  • feat(pr_review): send complete git diff to agent in first message by @xingyaoww in #1639
  • fix: Auto-add skills to_prompt() output to system prompt by @neubig in #1642
  • feat: Add include_default_tools option to control built-in tools by @xingyaoww in #1594
  • fix: remove duplicate example numbers in 02_remote_agent_server by @xingyaoww in #1637
  • Use AGENTS.md instead of repo.md in SDK examples/system prompt by @enyst in #1648
  • feat: Add public sandbox_id field to OpenHandsCloudWorkspace for resuming existing sandboxes by @malhotra5 in #1603
  • docs: Update environment configuration for secret encryption in Agent Server by @jagzmz in #1465
  • feat: add utility to convert legacy OpenHands skills to AgentSkills format by @xingyaoww in #1643
  • feat: Implement AgentSkills progressive disclosure for SKILL.md files by @xingyaoww in #1644
  • Add alive property to RemoteWorkspace by @malhotra5 in #1655
  • Expose max_retries input and dispatch to eval by @simonrosenberg in #1641

New Contributors

Full Changelog: v1.7.4...v1.8.0

v1.7.4

05 Jan 20:13
2cbe607

Choose a tag to compare

What's Changed

  • Release v1.7.3 by @all-hands-bot in #1551
  • Update OpenHands version bump workflow to include all required steps by @malhotra5 in #1553
  • fix: Wait for PyPI propagation and add Slack notification to release workflow by @xingyaoww in #1552
  • feat: support SKILL.md file convention and name validation by @neubig in #1480
  • feat: add pause() and resume() methods to workspace classes by @ixchio in #1539
  • build(deps): Bump libtmux to >=0.53.0 for v0.51.0 hard deprecations by @tony in #1561
  • feat: add DeepSeek v3.2 model support by @ixchio in #1564
  • refactor: consolidate duplicated blocking wait logic in RemoteConversation.run() + remove defensive if else by @simonrosenberg in #1569
  • Fix DiscriminatedUnionMixin issues with Pydantic C bindings by @tofarr in #1555
  • Add test to verify working_dir standardization (closes #211) by @xingyaoww in #1576
  • Re-add discriminator field to discriminated union JSON schema by @tofarr in #1578
  • fix: Cap thinking budget below max_tokens by @csmith49 in #1580
  • Relax needs-triage duration by @enyst in #1567
  • Fix RemoteConversation polling on terminal errors by @simonrosenberg in #1572
  • More test fixes by @tofarr in #1581
  • remove custom_llm_provider from LLM config by @enyst in #1583
  • Update cryptography to 46.0.3 by @enyst in #1585
  • feat: relax tool matching on resume by @ixchio in #1538
  • Set initial execution status to error if it was running by @tofarr in #1554
  • More efficient websocket based implementation for async bash execution by @tofarr in #1587
  • feat: Create conversation when provided ID doesn't exist by @malhotra5 in #1579
  • fix(condenser): Retry on empty condensation by @csmith49 in #1577
  • Bump pydantic by @tofarr in #1593

New Contributors

Full Changelog: v1.7.3...v1.7.4

v1.7.3

30 Dec 17:48

Choose a tag to compare

What's Changed

Full Changelog: v1.7.2...v1.7.3

v1.7.2

29 Dec 17:46

Choose a tag to compare

What's Changed

  • Release v1.7.1 by @all-hands-bot in #1513
  • Load model-specific repo instructions (CLAUDE.md for Claude only, GEMINI.md for Gemini only) by @enyst in #1328
  • Fix max iterations reached: Set ERROR status with clear message by @simonrosenberg in #1511
  • Save screenshots from browser tool by @hamiltop in #1443
  • Use ALLHANDS_BOT_GITHUB_PAT for bot-like workflows by @xingyaoww in #1519
  • Fix TmuxTerminal.close() to handle dead session exceptions by @xingyaoww in #1517
  • ci(integration): update integration LLM matrix to gpt-5.2-codex by @enyst in #1503
  • Add automated version bump PRs for downstream repos by @xingyaoww in #1520
  • feat: add early stopping/pruner for behavior tests cost optimization by @ixchio in #1433
  • Fix condensation for 0 events by adjusting default parameters by @xingyaoww in #1523
  • Add pull request template by @neubig in #1528
  • Revert "ci(integration): update integration LLM matrix to gpt-5.2-codex" by @xingyaoww in #1524

New Contributors

Full Changelog: v1.7.1...v1.7.2

v1.7.1

25 Dec 22:05
0b7ccc9

Choose a tag to compare

What's Changed

  • feat: add AgentSkills standard fields to Skill model by @neubig in #1479
  • Release v1.7.0 by @xingyaoww in #1486
  • Fix SDK_SHA reference in run-eval.yml Comment on PR step by @simonrosenberg in #1498
  • Add optional parallelization parameters to run-eval workflow by @simonrosenberg in #1499
  • Add compatibility fixes for Nemotron and similar models by @pankajarm in #1470
  • feat(condenser): Token-aware condensation in LLMSummarizingCondenser by @csmith49 in #1380
  • fix(condenser): Tool-call aware condensation by @csmith49 in #1412
  • feat(localFileStore): Add Cache Layer to LocalFileStore to Avoid I/O Overhead from Read Operations by @CLFutureX in #1274
  • feat: Add hooks system for event interception by @ak684 in #1467
  • fix: handle union types in py_type for mcp schema conversion by @hieptl in #1509
  • Remove tool preambles from gpt-5-codex by @enyst in #1512
  • fix(condenser): Tool-loop aware condensation by @csmith49 in #1508

New Contributors

Full Changelog: v1.7.0...v1.7.1

v1.7.0

23 Dec 15:08

Choose a tag to compare

What's Changed

New Contributors

Full Changelog: v1.6.0...v1.7.0