
Migrate Honcho Ts
- 324 installs
- 6.4k repo stars
- Updated August 4, 2026
- plastic-labs/honcho
migrate-honcho-ts is a Claude Code skill that upgrades an existing Honcho TypeScript client when `.core`, config, streaming, and session-scoped APIs changed for developers who need a working SDK after breaking Honcho rel
About
migrate-honcho-ts is a migration skill from plastic-labs/honcho for upgrading the Honcho TypeScript SDK after breaking API changes. It replaces the removed `.core` property with `.http` for advanced HTTP access, updates listing methods so `workspaces()` returns `Page<string>` instead of `string[]`, and adjusts `session.peers()` to return `Peer[]` instead of `Page<Peer>`. Developers reach for migrate-honcho-ts when a TypeScript agent app using Honcho memory fails to compile or behave correctly after an SDK update affecting config, streaming, or session APIs.
- Replaces removed `client.core` with `client.http` or automatic workspace handling
- Documents `Page<string>` vs array returns for `workspaces()` and `session.peers()`
- Moves `updateMessage` onto session and renames `config` to `configuration` with camelCase keys
- Covers streaming removal on `chat()` and peer/session configuration shape updates
Migrate Honcho Ts 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: MEDIUM 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-tsAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 324 |
|---|---|
| repo stars | ★ 6.4k |
| Security audit | 3 / 3 scanners passed |
| Last updated | August 4, 2026 |
| Repository | plastic-labs/honcho ↗ |
How do you migrate Honcho TypeScript client after API changes?
Upgrade an existing Honcho TypeScript client to the current SDK when `.core`, `config`, streaming, and session-scoped APIs changed.
Who is it for?
TypeScript developers maintaining Honcho-powered agent apps who hit compile or runtime errors after SDK changes to `.core`, config, streaming, or session APIs.
Skip if: Python Honcho migrations, new Honcho TypeScript projects on the latest SDK, or apps not using the Honcho TypeScript client.
When should I use this skill?
User mentions Honcho TypeScript migration, `.core` removal, `.http` accessor, workspaces Page return type, or session.peers() API changes.
What you get
Updated TypeScript Honcho client using `.http` instead of `.core`, corrected Page and Peer[] return types, and fixed session-scoped API calls
- Migrated TypeScript client code
- Updated HTTP and pagination call patterns
By the numbers
- Documents 2 listing return-type changes (`workspaces()` and `session.peers()`)
- Covers removal of the `.core` property in favor of `.http`
Files
Honcho TypeScript SDK Migration (v1.6.0 → v2.1.1)
Overview
This skill migrates code from @honcho-ai/sdk v1.6.0 to v2.1.1 (required for Honcho 3.0.0+).
Key breaking changes:
@honcho-ai/coredependency removed- "Observation" → "Conclusion" terminology
- "Deriver" → "Queue" terminology
getConfig/setConfig→getConfiguration/setConfigurationsnake_case→camelCasethroughout- Streaming via
chatStream()instead ofchat({ stream: true }) Representationclass removed (returns string now)
Quick Migration
1. Update dependencies
Remove @honcho-ai/core from package.json. The SDK now has its own HTTP client.
2. Replace .core with .http
// Before
const workspace = await client.core.workspaces.getOrCreate({ id: 'my-workspace' })
// After
const response = await client.http.post('/v3/workspaces', { body: { id: 'my-workspace' } })3. Rename configuration methods
// Before
await honcho.getConfig()
await honcho.setConfig({ key: 'value' })
await peer.getConfig()
await session.getConfig()
// After
await honcho.getConfiguration()
await honcho.setConfiguration({ reasoning: { enabled: true } })
await peer.getConfiguration()
await session.getConfiguration()4. Rename listing methods
// Before
const peers = await honcho.getPeers()
const sessions = await honcho.getSessions()
const workspaces = await honcho.getWorkspaces() // string[]
// After
const peers = await honcho.peers()
const sessions = await honcho.sessions()
const workspaces = await honcho.workspaces() // Page<string>5. Update streaming
// Before
const stream = await peer.chat('Hello', { stream: true })
// After
const stream = await peer.chatStream('Hello')6. Update observations → conclusions
// Before
peer.observations
peer.observationsOf('bob')
maxObservations: 50
includeMostDerived: true
// After
peer.conclusions
peer.conclusionsOf('bob')
maxConclusions: 50
includeMostFrequent: true7. Update queue status methods
// Before
await honcho.getDeriverStatus({ observer: peer })
await honcho.pollDeriverStatus({ timeoutMs: 60000 }) // REMOVE - see note below
// After
await honcho.queueStatus({ observer: peer })
// pollDeriverStatus() has no replacement - see note belowImportant: pollDeriverStatus() and its polling pattern have been removed entirely. Do not rely on the queue ever being empty. The queue is a continuous processing system—new messages may arrive at any time, and waiting for "completion" is not a valid pattern. If your code previously polled for queue completion, redesign it to work without that assumption.
8. Convert snake_case to camelCase
// Before
message.peer_id
message.session_id
message.created_at
message.token_count
{ observe_me: true, observe_others: false }
{ created_at: '2024-01-01' }
// After
message.peerId
message.sessionId
message.createdAt
message.tokenCount
{ observeMe: true, observeOthers: false }
{ createdAt: '2024-01-01' }9. Update representation calls
// Before
const rep = await peer.workingRep(session, target, options)
console.log(rep.explicit) // ExplicitObservation[]
console.log(rep.deductive) // DeductiveObservation[]
// After
const rep = await peer.representation({ session, target, ...options })
console.log(rep) // string10. Move updateMessage to session
// Before
await honcho.updateMessage(message, metadata, session)
// After
await session.updateMessage(message, metadata)11. Update card() to getCard() (v2.0.1+)
// Before
const card = await peer.card(target)
// After (v2.0.1+)
const card = await peer.getCard(target) // Returns string[] | null
// peer.card() still works but is deprecated — use getCard()
// New: setPeerCard / setCard
await peer.setCard(['Prefers dark mode', 'Located in US'])12. Strict input validation (v2.0.2+)
Client constructor and all input schemas now reject unknown options via .strict() Zod validation.
// Before (v2.0.1 and earlier) — silently ignored
const honcho = new Honcho({ baseUrl: 'http://...' }) // typo: baseUrl vs baseURL — silently fell back to default
// After (v2.0.2+) — throws ZodError
const honcho = new Honcho({ baseUrl: 'http://...' }) // ZodError! Use baseURL13. 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
const session = honcho.session('my-session') // Lazy, no network request
// After (v2.1.0+) — always hits the API
const session = await honcho.session('my-session') // Makes POST to /sessions (get-or-create)14. New properties and methods (v2.1.0+)
// createdAt on Peer and Session
const peer = await honcho.peer('user-123')
console.log(peer.createdAt) // string | undefined
const session = await honcho.session('sess-1')
console.log(session.createdAt) // string | undefined
// isActive on Session
console.log(session.isActive) // boolean | undefined
// getMessage() on Session
const msg = await session.getMessage('msg-id')15. Pagination parameters on list methods (v2.1.0+)
All list methods now accept page, size, and reverse parameters:
// Before (v2.0.x) — only filters
const peers = await honcho.peers({ metadata: { role: 'admin' } })
// After (v2.1.0+) — pagination controls via options object
const peers = await honcho.peers({
filters: { metadata: { role: 'admin' } },
page: 2,
size: 25,
reverse: true
})
// Legacy raw-filter form still works:
const peers = await honcho.peers({ metadata: { role: 'admin' } })
// Works on: honcho.peers(), honcho.sessions(), honcho.workspaces(),
// peer.sessions(), session.messages(), scope.list()16. searchQuery moved in context() (v2.1.0+)
Breaking: searchQuery removed from top-level context() options. Use representationOptions.searchQuery instead.
// Before (v2.0.x)
await session.context({ searchQuery: '...' })
// After (v2.1.0+)
await session.context({ representationOptions: { searchQuery: '...' } })17. Broader fetch retry logic (v2.1.1+)
The SDK now retries on all TypeError network failures (connection resets, DNS errors, etc.) instead of only those with 'fetch' in the message. No code changes needed — this is transparent.
Quick Reference Table
| v1.6.0 | v2.0.0 |
|---|---|
client.core | client.http |
getConfig() | getConfiguration() |
setConfig() | setConfiguration() |
getPeers() | peers() |
getSessions() | sessions() |
getWorkspaces() | workspaces() |
getDeriverStatus() | queueStatus() |
pollDeriverStatus() | Removed - do not poll |
peer.chat(q, { stream: true }) | peer.chatStream(q) |
peer.workingRep() | peer.representation() |
peer.getContext() | peer.context() |
peer.observations | peer.conclusions |
peer.observationsOf() | peer.conclusionsOf() |
session.getPeers() | session.peers() |
session.getMessages() | session.messages() |
session.getSummaries() | session.summaries() |
session.getContext() | session.context() |
session.workingRep() | session.representation() |
session.peerConfig() | session.getPeerConfiguration() |
session.setPeerConfig() | session.setPeerConfiguration() |
{ timeoutMs: 60000 } | { timeout: 60000 } |
{ maxObservations: 50 } | { maxConclusions: 50 } |
{ includeMostDerived } | { includeMostFrequent } |
{ lastUserMessage } | { searchQuery } |
{ config: ... } | { configuration: ... } |
message.peer_id | message.peerId |
message.created_at | message.createdAt |
peer.card() | peer.getCard() (card() deprecated) |
| (new) | peer.setCard(string[]) |
Observation | Conclusion |
ObservationScope | ConclusionScope |
| (new v2.1.0) | peer.createdAt / session.createdAt |
| (new v2.1.0) | session.isActive |
| (new v2.1.0) | session.getMessage(id) |
| (new v2.1.0) | page, size, reverse on list methods |
context({ searchQuery }) | context({ representationOptions: { searchQuery } }) |
Detailed Reference
For comprehensive details on each change, see:
- DETAILED-CHANGES.md - Full API change documentation
- MIGRATION-CHECKLIST.md - Step-by-step checklist
New Error Types
import {
HonchoError,
AuthenticationError,
BadRequestError,
NotFoundError,
PermissionDeniedError,
RateLimitError,
ConflictError,
UnprocessableEntityError,
ServerError,
ConnectionError,
TimeoutError
} from '@honcho-ai/sdk'New Configuration Types
Configurations are now strongly typed:
await honcho.setConfiguration({
reasoning: {
enabled: true,
customInstructions: 'Be concise'
},
peerCard: { use: true, create: true },
summary: {
enabled: true,
messagesPerShortSummary: 20,
messagesPerLongSummary: 60
},
dream: { enabled: true }
})Detailed API Changes
Client Changes
.core Property Removed
The .core property (which exposed the raw @honcho-ai/core client) has been removed. Use .http for advanced HTTP access.
// Before
const workspace = await client.core.workspaces.getOrCreate({ id: 'my-workspace' })
// After - SDK handles workspace creation automatically
// For advanced usage:
const response = await client.http.post('/v3/workspaces', { body: { id: 'my-workspace' } })Listing Methods Return Type Changes
workspaces()now returnsPage<string>instead ofstring[]session.peers()now returnsPeer[]instead ofPage<Peer>
const workspacePage = await honcho.workspaces()
for (const id of workspacePage.items) {
console.log(id)
}updateMessage() Moved to Session
// Before
await honcho.updateMessage(message, { key: 'value' }, session)
// After
await session.updateMessage(message, { key: 'value' })config Option Renamed to configuration
// Before
const peer = await honcho.peer('user-id', { config: { observe_me: true } })
const session = await honcho.session('session-id', { config: { ... } })
// After
const peer = await honcho.peer('user-id', { configuration: { observeMe: true } })
const session = await honcho.session('session-id', { configuration: { reasoning: { enabled: true } } })---
Peer Changes
Streaming API
The stream option on chat() has been removed. Use chatStream() instead.
// Before
const stream = await peer.chat('Hello', { stream: true })
for await (const chunk of stream) {
process.stdout.write(chunk)
}
// After
const stream = await peer.chatStream('Hello')
for await (const chunk of stream) {
process.stdout.write(chunk)
}Non-streaming chat() now only returns string | null:
const response = await peer.chat('Hello') // Returns string | nullNew reasoningLevel Option
const response = await peer.chat('Complex question', {
reasoningLevel: 'high' // 'minimal' | 'low' | 'medium' | 'high' | 'max'
})workingRep() Renamed to representation()
// Before
const rep = await peer.workingRep(session, target, options)
console.log(rep.toString())
console.log(rep.explicit)
console.log(rep.deductive)
// After
const rep = await peer.representation({
session,
target,
searchQuery: options?.searchQuery,
maxConclusions: options?.maxObservations,
includeMostFrequent: options?.includeMostDerived,
})
console.log(rep) // Returns string directlygetContext() Renamed to context()
Options are now passed as a single object:
// Before
const ctx = await peer.getContext(target, options)
// After
const ctx = await peer.context({ target, ...options })card() Return Type Changed
// Before
const card = await peer.card(target) // Returns string
// After
const card = await peer.card(target) // Returns string[] | nullmessage() Options Changed
// Before
const msg = peer.message('Hello', {
metadata: { key: 'value' },
configuration: { deriver: { enabled: true } },
created_at: '2024-01-01T00:00:00Z'
})
// Returns ValidatedMessageCreate with peer_id, created_at
// After
const msg = peer.message('Hello', {
metadata: { key: 'value' },
configuration: { reasoning: { enabled: true } },
createdAt: '2024-01-01T00:00:00Z'
})
// Returns MessageInput with peerId, createdAtPeerContext.representation Type Changed
// Before
const ctx = await peer.getContext()
if (ctx.representation) {
console.log(ctx.representation.explicit) // Representation object
console.log(ctx.representation.deductive)
}
// After
const ctx = await peer.context()
if (ctx.representation) {
console.log(ctx.representation) // Now a string
}---
Session Changes
getPeers() Return Type Changed
// Before
const peers = await session.getPeers() // Returns Page<Peer>
// After
const peers = await session.peers() // Returns Peer[]getContext() Renamed to context()
// Before
const ctx = await session.getContext({
summary: true,
peerTarget: user,
peerPerspective: assistant,
lastUserMessage: "What are my preferences?",
representationOptions: {
maxObservations: 50,
includeMostDerived: true
}
})
// After
const ctx = await session.context({
summary: true,
peerTarget: user,
peerPerspective: assistant,
searchQuery: "What are my preferences?",
representationOptions: {
maxConclusions: 50,
includeMostFrequent: true
}
})SessionPeerConfig Uses camelCase and Methods Renamed
// Before
await session.setPeerConfig(peer, {
observe_me: true,
observe_others: false
})
const config = await session.peerConfig(peer)
// After
await session.setPeerConfiguration(peer, {
observeMe: true,
observeOthers: false
})
const config = await session.getPeerConfiguration(peer)---
Message Changes
Message Properties Use camelCase
// Before (from @honcho-ai/core)
message.peer_id
message.session_id
message.workspace_id
message.created_at
message.token_count
// After
message.peerId
message.sessionId
message.workspaceId
message.createdAt
message.tokenCountMessageInput Type
// Before
interface ValidatedMessageCreate {
peer_id: string
content: string
metadata?: Record<string, unknown>
configuration?: Record<string, unknown>
created_at?: string
}
// After
interface MessageInput {
peerId: string
content: string
metadata?: Record<string, unknown>
configuration?: MessageConfiguration
createdAt?: string
}---
Streaming Changes
DialecticStreamDelta Removed
// Before
import { DialecticStreamDelta, DialecticStreamChunk } from '@honcho-ai/sdk'
// After
import { DialecticStreamChunk, DialecticStreamResponse } from '@honcho-ai/sdk'---
Configuration Changes
Workspace Configuration
Configurations are now strongly typed objects instead of Record<string, unknown>.
// Before
await honcho.setConfig({
deriver: { enabled: true },
some_custom_key: 'value'
})
// After
await honcho.setConfiguration({
reasoning: {
enabled: true,
customInstructions: 'Be concise'
},
peerCard: {
use: true,
create: true
},
summary: {
enabled: true,
messagesPerShortSummary: 20,
messagesPerLongSummary: 60
},
dream: {
enabled: true
}
})Peer Configuration
// Before
await peer.setConfig({ observe_me: false })
// After
await peer.setConfiguration({ observeMe: false })Message Configuration
// Before
peer.message('Hello', {
configuration: {
deriver: { enabled: true }
}
})
// After
peer.message('Hello', {
configuration: {
reasoning: {
enabled: true,
customInstructions: 'Focus on emotions'
}
}
})---
Type Changes
Removed Exports
Observation(useConclusion)ObservationScope(useConclusionScope)ObservationData,ObservationCreateParam,ObservationQueryParamsRepresentation,RepresentationData,RepresentationOptions(class removed)ExplicitObservation,DeductiveObservationDialecticStreamDeltaDeriverStatusOptions(useQueueStatusOptions)MessageCreate(useMessageInput)WorkingRepParams
New Exports
import {
// Domain classes
Conclusion,
ConclusionScope,
ConclusionCreateParams,
// Error types
HonchoError,
AuthenticationError,
BadRequestError,
NotFoundError,
PermissionDeniedError,
RateLimitError,
ConflictError,
UnprocessableEntityError,
ServerError,
ConnectionError,
TimeoutError,
// Message types
Message,
MessageInput,
// Configuration types
WorkspaceConfig,
SessionConfig,
PeerConfig,
SessionPeerConfig,
MessageConfiguration,
ReasoningConfig,
PeerCardConfig,
SummaryConfig,
DreamConfig,
// API response types
QueueStatus,
QueueStatusOptions,
RepresentationOptions,
ConclusionQueryParams,
ConclusionResponse,
} from '@honcho-ai/sdk'SummaryData Type Changed
// Before
interface SummaryData {
content: string
message_id: string
summary_type: string
created_at: string
token_count: number
}
// After
interface SummaryData {
content: string
messageId: string
summaryType: string
createdAt: string
tokenCount: number
}---
Post-v2.0.0 Changes
---
Card Method Deprecation and setCard (v2.0.1)
Before (v2.0.0)
const card = await peer.card(target) // string[] | nullAfter (v2.0.1+)
// getCard() is the preferred method
const card = await peer.getCard(target) // string[] | null
// card() still works but is deprecated
const card = await peer.card(target) // Deprecated
// New: setCard()
const updated = await peer.setCard(['Fact 1', 'Fact 2'])
const updated = await peer.setCard(['Fact 1'], targetPeer)---
Strict Input Validation (v2.0.2)
Client constructor and all input schemas now use .strict() Zod validation.
// Before (v2.0.1) — silently ignored
const honcho = new Honcho({ baseUrl: 'http://...' }) // typo fell back to default
// After (v2.0.2+) — ZodError thrown
const honcho = new Honcho({ baseUrl: 'http://...' }) // ZodError: Unrecognized key "baseUrl"---
peer() and session() Always Make API Calls (v2.1.0)
Before (v2.0.x)
// Without options: lazy object, no API call
const peer = honcho.peer('user-123')
// With options: made API call
const peer = await honcho.peer('user-123', { metadata: { key: 'value' } })After (v2.1.0+)
// Always makes a get-or-create API call
const peer = await honcho.peer('user-123')
// peer.createdAt is now always populated---
New Properties: createdAt, isActive (v2.1.0)
// Peer
const peer = await honcho.peer('user-123')
console.log(peer.createdAt) // string | undefined
// Session
const session = await honcho.session('sess-1')
console.log(session.createdAt) // string | undefined
console.log(session.isActive) // boolean | undefined
// Refreshed by getMetadata(), getConfiguration(), and refresh()
await session.refresh()---
getMessage() on Session (v2.1.0)
// Fetch a single message by ID
const msg = await session.getMessage('msg-abc123')
console.log(msg.content, msg.createdAt)---
Pagination Parameters (v2.1.0)
All list methods now accept page, size, and reverse:
// Defaults: page=1, size=50, reverse=false
const peersPage = await honcho.peers({
filters: { metadata: { role: 'admin' } },
page: 2,
size: 25,
reverse: true
})
// Page<T> properties:
console.log(peersPage.total) // Total items
console.log(peersPage.pages) // Total pages
console.log(peersPage.hasNextPage) // boolean
// Works on:
// honcho.peers(), honcho.sessions(), honcho.workspaces()
// peer.sessions()
// session.messages()
// scope.list()---
searchQuery Moved in context() (v2.1.0)
Before (v2.0.x)
const ctx = await session.context({
searchQuery: 'What are my preferences?',
representationOptions: { maxConclusions: 50 }
})After (v2.1.0+)
const ctx = await session.context({
representationOptions: {
searchQuery: 'What are my preferences?',
maxConclusions: 50
}
})---
Broader Fetch Retry Logic (v2.1.1)
The SDK now retries on all TypeError network failures (connection resets, DNS errors, etc.) instead of only those containing 'fetch' in the error message. This is transparent — no code changes needed.
Migration Checklist
Use this checklist to track migration progress. Copy into your working notes and check off items as completed.
Dependencies
- [ ] Remove
@honcho-ai/corefrom dependencies - [ ] Update
@honcho-ai/sdkto v2.1.1
Client-Level Changes
- [ ] Replace all
.coreusages with.httpor remove - [ ] Rename
getConfig()→getConfiguration() - [ ] Rename
setConfig()→setConfiguration() - [ ] Rename
getPeers()→peers() - [ ] Rename
getSessions()→sessions() - [ ] Rename
getWorkspaces()→workspaces()(returnsPage<string>now) - [ ] Rename
getDeriverStatus()→queueStatus() - [ ] Remove
pollDeriverStatus()calls entirely (no replacement—do not rely on queue being empty) - [ ] Move
updateMessage()calls from client to session
Peer-Level Changes
- [ ] Replace
peer.chat(q, { stream: true })withpeer.chatStream(q) - [ ] Rename
getSessions()→sessions() - [ ] Rename
getConfig()→getConfiguration() - [ ] Rename
setConfig()→setConfiguration() - [ ] Rename
peerConfig()→getPeerConfiguration() - [ ] Rename
setPeerConfig()→setPeerConfiguration() - [ ] Rename
workingRep()→representation()(returns string now) - [ ] Rename
getContext()→context() - [ ] Replace
observations→conclusions - [ ] Replace
observationsOf()→conclusionsOf() - [ ] Handle
card()returningstring[] | nullinstead ofstring
Session-Level Changes
- [ ] Rename
getPeers()→peers()(returnsPeer[]now, notPage<Peer>) - [ ] Rename
getMessages()→messages() - [ ] Rename
getConfig()→getConfiguration() - [ ] Rename
setConfig()→setConfiguration() - [ ] Rename
getContext()→context() - [ ] Rename
getSummaries()→summaries() - [ ] Rename
getDeriverStatus()→queueStatus() - [ ] Remove
pollDeriverStatus()calls entirely (no replacement—do not rely on queue being empty) - [ ] Rename
workingRep()→representation()(returns string now)
Terminology Changes
- [ ] Rename
maxObservations→maxConclusions - [ ] Rename
includeMostDerived→includeMostFrequent - [ ] Rename
lastUserMessage→searchQuery - [ ] Rename
Observationtype →Conclusion - [ ] Rename
ObservationScopetype →ConclusionScope
snake_case → camelCase
- [ ] Update all
{ config: ... }to{ configuration: ... } - [ ] Update
observe_me→observeMe - [ ] Update
observe_others→observeOthers - [ ] Update
created_at→createdAt - [ ] Update message property access:
- [ ]
peer_id→peerId - [ ]
session_id→sessionId - [ ]
workspace_id→workspaceId - [ ]
created_at→createdAt - [ ]
token_count→tokenCount - [ ] Update summary property access:
- [ ]
message_id→messageId - [ ]
summary_type→summaryType
Configuration Objects
- [ ] Update workspace configuration to typed structure
- [ ] Update session configuration to typed structure
- [ ] Update peer configuration to typed structure
- [ ] Replace
deriverconfig withreasoningconfig
Error Handling
- [ ] Update error handling to use new error types if needed
Type Imports
- [ ] Remove imports of deleted types:
Observation,ObservationScope,ObservationDataRepresentation,RepresentationDataExplicitObservation,DeductiveObservationDialecticStreamDeltaDeriverStatusOptionsMessageCreate,ValidatedMessageCreateWorkingRepParams- [ ] Add imports of new types as needed:
Conclusion,ConclusionScopeMessageInputQueueStatusOptions- Error types
Representation Handling
- [ ] Remove usage of
Representationclass methods (.explicit,.deductive,.isEmpty(),.diff()) - [ ] Handle representation as plain string
Card Method Updates (v2.0.1)
- [ ] Replace
peer.card()withpeer.getCard()(card() is deprecated) - [ ] Use
peer.setCard(string[])if setting peer cards
Strict Validation (v2.0.2)
- [ ] Verify no constructor options or input schemas pass unknown/misspelled fields (now throws
ZodError) - [ ] Check for
baseUrlvsbaseURLtypo in Honcho constructor
peer() / session() API Call Change (v2.1.0)
- [ ] Update code that relied on lazy
peer()/session()— they now always make API calls - [ ] Ensure all
peer()andsession()calls areawaited
New Properties (v2.1.0)
- [ ] Use
peer.createdAt/session.createdAtwhere creation time is needed - [ ] Use
session.isActivewhere session active status is needed
New Methods (v2.1.0)
- [ ] Use
session.getMessage(messageId)to fetch single messages by ID
Pagination Parameters (v2.1.0)
- [ ] Add
page,size,reverseparameters to list calls where needed: - [ ]
honcho.peers() - [ ]
honcho.sessions() - [ ]
honcho.workspaces() - [ ]
peer.sessions() - [ ]
session.messages() - [ ]
scope.list()
searchQuery Location Change (v2.1.0)
- [ ] Move
searchQueryfrom top-levelcontext()options torepresentationOptions.searchQuery
Final Verification
- [ ] Run TypeScript compiler with no errors
- [ ] Run tests
- [ ] Verify streaming functionality works
- [ ] Verify configuration changes take effect
Related skills
How it compares
Use migrate-honcho-ts for TypeScript Honcho upgrades; use migrate-honcho for Python v1.6 to v2.0 migrations.
FAQ
What replaced Honcho TypeScript `.core`?
Honcho TypeScript removed the `.core` property that exposed the raw `@honcho-ai/core` client. Developers use `.http` for advanced HTTP access, while the SDK handles workspace creation automatically in typical flows.
What return type changes affect Honcho TypeScript migrations?
migrate-honcho-ts covers listing changes where `workspaces()` now returns `Page<string>` instead of `string[]`, and `session.peers()` returns `Peer[]` instead of `Page<Peer>`, requiring pagination and iteration updates.
Is Migrate Honcho Ts safe to install?
skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.