Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
plastic-labs avatar

Migrate Honcho

  • 324 installs
  • 6.4k repo stars
  • Updated August 4, 2026
  • plastic-labs/honcho

migrate-honcho is a Claude Code skill that upgrades Honcho Python client code from v1.6 async classes and the Observations API to v2.0 `.aio` accessor and Conclusions terminology for developers who must migrate agent mem

About

migrate-honcho is a migration skill from plastic-labs/honcho that walks developers through upgrading the Honcho Python SDK from v1.6.0 to v2.0.0. It replaces separate AsyncHoncho, AsyncPeer, and AsyncSession classes with a single Honcho client using the `.aio` accessor for async operations, and updates Observations API calls to Conclusions terminology. Developers reach for migrate-honcho when an existing Python agent or chat app depends on Honcho memory and a version bump would otherwise break peer, session, and chat flows.

  • Replaces AsyncHoncho, AsyncPeer, and AsyncSession with Honcho() plus `.aio` on peers and sessions
  • Documents async iteration patterns such as `async for p in client.aio.peers()`
  • Renames Observations/ObservationScope APIs to Conclusions with scoped list and query flows
  • Step-by-step import and type-hint cleanup for sync/async dual usage on one client

Migrate Honcho by the numbers

  • 324 all-time installs (skills.sh)
  • +14 installs in the week ending Aug 4, 2026 (Skillselion tracking)
  • Ranked #2,220 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
  • Security screen: LOW risk (skills.sh audit)
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/plastic-labs/honcho --skill migrate-honcho

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs324
repo stars6.4k
Security audit3 / 3 scanners passed
Last updatedAugust 4, 2026
Repositoryplastic-labs/honcho

How do you migrate Honcho Python client from v1.6 to v2.0?

Upgrade Honcho Python client code from v1.6 async classes and Observations API to v2.0 `.aio` accessor and Conclusions terminology without breaking agent memory flows.

Who is it for?

Python developers maintaining agent apps that store session memory through Honcho and need a guided v1.6.0 to v2.0.0 SDK migration without breaking chat flows.

Skip if: Greenfield Honcho integrations starting on v2.0, TypeScript Honcho projects, or teams not using the Honcho Python client.

When should I use this skill?

User mentions Honcho Python migration, v1.6 to v2.0 upgrade, AsyncHoncho removal, Observations to Conclusions rename, or `.aio` accessor changes.

What you get

Updated Python Honcho client code using `.aio` accessor, unified Honcho class, and Conclusions API replacing Observations

  • Migrated Python client code
  • Updated async call patterns

By the numbers

  • Covers Honcho Python SDK migration from v1.6.0 to v2.0.0
  • Documents removal of 3 separate async classes (AsyncHoncho, AsyncPeer, AsyncSession)

Files

SKILL.mdMarkdownGitHub ↗

Honcho Python SDK Migration (v1.6.0 → v2.1.1)

Overview

This skill migrates code from honcho Python SDK v1.6.0 to v2.1.1 (required for Honcho 3.0.0+).

Key breaking changes:

  • AsyncHoncho/AsyncPeer/AsyncSession removed → use .aio accessor
  • "Observation" → "Conclusion" terminology
  • Representation class removed (returns str now)
  • get_config/set_configget_configuration/set_configuration
  • Streaming via chat_stream() instead of chat(stream=True)
  • poll_deriver_status() removed
  • .core property removed

Quick Migration

1. Update async architecture

# Before
from honcho import AsyncHoncho, AsyncPeer, AsyncSession

async_client = AsyncHoncho()
peer = await async_client.peer("user-123")
response = await peer.chat("query")

# After
from honcho import Honcho

client = Honcho()
peer = await client.aio.peer("user-123")
response = await peer.aio.chat("query")

# Async iteration
async for p in client.aio.peers():
    print(p.id)

2. Replace observations with conclusions

# Before
from honcho import Observation, ObservationScope, AsyncObservationScope

scope = peer.observations
scope = peer.observations_of("other-peer")
rep = scope.get_representation()

# After
from honcho import Conclusion, ConclusionScope, ConclusionScopeAio

scope = peer.conclusions
scope = peer.conclusions_of("other-peer")
rep = scope.representation()  # Returns str

3. Update representation handling

# Before
from honcho import Representation, ExplicitObservation, DeductiveObservation

rep: Representation = peer.working_rep()
print(rep.explicit)
print(rep.deductive)
if rep.is_empty():
    print("No observations")

# After
rep: str = peer.representation()
print(rep)  # Just a string now
if not rep:
    print("No conclusions")

4. Rename configuration methods

# Before
config = peer.get_config()
peer.set_config({"observe_me": False})
session.get_config()
client.get_config()

# After
from honcho.api_types import PeerConfig, SessionConfiguration, WorkspaceConfiguration

config = peer.get_configuration()
peer.set_configuration(PeerConfig(observe_me=False))
session.get_configuration()
client.get_configuration()

5. Update method names

# Before
peer.working_rep()
peer.get_context()
peer.get_sessions()
session.get_context()
session.get_summaries()
session.get_messages()
session.get_peers()
session.get_peer_config()
client.get_peers()
client.get_sessions()
client.get_workspaces()

# After
peer.representation()
peer.context()
peer.sessions()
session.context()
session.summaries()
session.messages()
session.peers()
session.get_peer_configuration()
client.peers()
client.sessions()
client.workspaces()

6. Update streaming

# Before
response = peer.chat("query", stream=True)
for chunk in response:
    print(chunk, end="")

# After
stream = peer.chat_stream("query")
for chunk in stream:
    print(chunk, end="")

7. Update queue status (formerly deriver)

# Before
from honcho_core.types import DeriverStatus

status = client.get_deriver_status()
status = client.poll_deriver_status(timeout=300.0)  # Removed!

# After
from honcho.api_types import QueueStatusResponse

status = client.queue_status()
# poll_deriver_status removed - implement polling manually if needed

8. Update representation parameters

# Before
rep = peer.working_rep(
    include_most_derived=True,
    max_observations=50
)

# After
rep = peer.representation(
    include_most_frequent=True,
    max_conclusions=50
)

9. Move update_message to session

# Before
updated = client.update_message(message=msg, metadata={"key": "value"}, session="sess-id")

# After
updated = session.update_message(message=msg, metadata={"key": "value"})

10. Update card() return type and method name

# Before
card: str = peer.card()  # Returns str

# After (v2.0.0+)
card: list[str] | None = peer.get_card()  # Returns list[str] | None
if card:
    print("\n".join(card))

# peer.card() still works but is deprecated — use get_card()

# New in v2.0.1: set_card()
peer.set_card(["Prefers dark mode", "Located in US"])

11. Strict input validation (v2.0.2+)

All input models now reject unknown fields via extra="forbid" Pydantic validation. Previously, misspelled or extraneous fields were silently ignored.

# Before (v2.0.1 and earlier) — silently ignored
peer = client.peer("user-1", configuration=PeerConfig(observe_mee=True))  # typo silently ignored

# After (v2.0.2+) — raises ValidationError
peer = client.peer("user-1", configuration=PeerConfig(observe_mee=True))  # ValidationError!

12. peer() and session() always make API calls (v2.1.0+)

Breaking: peer() and session() now always make a get-or-create API call. Previously, calling without metadata/configuration returned a lazy object with no API call.

# Before (v2.0.x) — no API call without options
peer = client.peer("user-123")  # Lazy, no network request

# After (v2.1.0+) — always hits the API
peer = client.peer("user-123")  # Makes POST to /peers (get-or-create)

# Async
peer = await client.aio.peer("user-123")  # Also always hits API

13. New properties and methods (v2.1.0+)

# created_at on Peer and Session
peer = client.peer("user-123")
print(peer.created_at)  # datetime | None

session = client.session("sess-1")
print(session.created_at)  # datetime | None

# is_active on Session
print(session.is_active)  # bool | None

# get_message() on Session
msg = session.get_message("msg-id")
# Async: msg = await session.aio.get_message("msg-id")

14. Pagination parameters on list methods (v2.1.0+)

All list methods now accept page, size, and reverse parameters:

# Before (v2.0.x) — only filters
peers_page = client.peers(filters={"metadata": {"role": "admin"}})

# After (v2.1.0+) — pagination controls
peers_page = client.peers(
    filters={"metadata": {"role": "admin"}},
    page=2,
    size=25,
    reverse=True
)

# Works on: client.peers(), client.sessions(), peer.sessions(),
# session.messages(), scope.list()

15. Broader HTTP retry logic (v2.1.1+)

The SDK now retries on httpx.TimeoutException, httpx.NetworkError, and httpx.RemoteProtocolError (previously only httpx.TimeoutException and httpx.ConnectError). These are mapped to the SDK's TimeoutError and ConnectionError respectively. No code changes needed — this is transparent.

Quick Reference Table

v1.6.0v2.0.0
AsyncHoncho()Honcho() + .aio accessor
AsyncPeerPeer + .aio accessor
AsyncSessionSession + .aio accessor
ObservationConclusion
ObservationScopeConclusionScope
AsyncObservationScopeConclusionScopeAio
Representationstr
.observations.conclusions
.observations_of().conclusions_of()
.get_config().get_configuration()
.set_config().set_configuration()
.working_rep().representation()
.get_context().context()
.get_sessions().sessions()
.get_peers().peers()
.get_messages().messages()
.get_summaries().summaries()
.get_deriver_status().queue_status()
.poll_deriver_status()(removed)
.get_peer_config().get_peer_configuration()
.set_peer_config().set_peer_configuration()
client.update_message()session.update_message()
peer.card()peer.get_card() (card() deprecated)
(new)peer.set_card(list[str])
chat(stream=True)chat_stream()
include_most_derived=include_most_frequent=
max_observations=max_conclusions=
last_user_message=search_query=
config=configuration=
PeerContextPeerContextResponse
DeriverStatusQueueStatusResponse
client.core(removed)
(new v2.1.0)peer.created_at / session.created_at
(new v2.1.0)session.is_active
(new v2.1.0)session.get_message(id)
(new v2.1.0)page=, size=, reverse= on list methods

Detailed Reference

For comprehensive details on each change, see:

  • DETAILED-CHANGES.md - Full API change documentation
  • MIGRATION-CHECKLIST.md - Step-by-step checklist

New Exception Types

from honcho import (
    HonchoError,
    APIError,
    BadRequestError,
    AuthenticationError,
    PermissionDeniedError,
    NotFoundError,
    ConflictError,
    UnprocessableEntityError,
    RateLimitError,
    ServerError,
    TimeoutError,
    ConnectionError,
)

New Import Locations

# Configuration types
from honcho.api_types import (
    PeerConfig,
    SessionConfiguration,
    WorkspaceConfiguration,
    SessionPeerConfig,
    QueueStatusResponse,
    PeerContextResponse,
)

# Async type hints
from honcho import HonchoAio, PeerAio, SessionAio

# Message types (note: Params is plural now)
from honcho import Message, MessageCreateParams

Related skills

How it compares

Use migrate-honcho for Python Honcho upgrades; use migrate-honcho-ts for TypeScript client changes.

FAQ

What changed between Honcho Python v1.6 and v2.0?

Honcho Python v2.0.0 removes separate AsyncHoncho, AsyncPeer, and AsyncSession classes. Developers use a single Honcho client with a `.aio` accessor for async operations, and the Observations API is renamed to Conclusions.

Does migrate-honcho break existing agent memory flows?

migrate-honcho is designed to upgrade Honcho Python client code from v1.6 to v2.0 without breaking agent memory flows by mapping async class usage to `.aio` and updating Observations calls to Conclusions.

Is Migrate Honcho safe to install?

skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.

AI & Agent Buildingagentsautomation

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.