Memory library for building stateful agents
Go to file
Vineeth Voruganti 20f07c4d32 savepoint 2025-05-28 17:46:09 -04:00
.github fix (actions): Mock Chat function entirely 2025-05-27 18:54:39 -04:00
.vscode Single prompt tom (#89) 2025-02-24 19:12:31 -05:00
docs v1.1.0 Release Notes (#110) 2025-05-15 17:09:40 -04:00
migrations add indexes for query documents (#111) 2025-05-22 15:13:58 -04:00
scripts Alembic genesis (#106) 2025-05-13 12:26:58 -04:00
src savepoint 2025-05-28 17:46:09 -04:00
tests fix (actions): Mock Chat function entirely 2025-05-27 18:54:39 -04:00
.dockerignore Dialectic Endpoint Improvements (#67) 2024-09-14 17:06:11 -04:00
.env.template v1.0.0 Release Candidate (#95) 2025-04-10 13:59:40 -04:00
.gitignore feat (config): Using pydantic settings for managing settings values across the project 2025-05-27 15:52:25 -04:00
.python-version Switch from UUIDv4 to NanoID (#71) 2024-10-17 14:07:51 -04:00
CHANGELOG.md v1.1.0 Release Notes (#110) 2025-05-15 17:09:40 -04:00
CLAUDE.md Fix Inconsistent Error Handling (#90) 2025-03-05 09:44:49 -05:00
CONTRIBUTING.md v1.0.0 Release Candidate (#95) 2025-04-10 13:59:40 -04:00
Dockerfile Continuous deployment of Honcho images to SaaS platform (#102) 2025-05-09 00:21:54 +09:00
LICENSE Initial commit 2023-09-10 17:29:55 -04:00
README.md chore (docs): Add README and coderabbit nitpicks 2025-05-27 16:19:21 -04:00
alembic.ini Database Concurrency Optimizations (#80) 2024-12-13 11:56:39 -05:00
config.toml.example feat (config): Using pydantic settings for managing settings values across the project 2025-05-27 15:52:25 -04:00
docker-compose.yml.example Github Actions for Testing (#69) 2024-09-14 21:33:04 -04:00
fly.toml Database Concurrency Optimizations (#80) 2024-12-13 11:56:39 -05:00
init.sql v0.0.8 Documentation Updates (#55) 2024-05-15 00:07:25 -04:00
pyproject.toml feat (config): Using pydantic settings for managing settings values across the project 2025-05-27 15:52:25 -04:00
uv.lock feat (config): Using pydantic settings for managing settings values across the project 2025-05-27 15:52:25 -04:00

README.md

🫡 Honcho

Static Badge Discord arXiv GitHub License GitHub Repo stars X (formerly Twitter) URL PyPI version NPM version

Honcho is a platform for making AI agents and LLM powered applications that are personalized to their end users. It leverages the inherent theory-of-mind capabilities of LLMs to cohere to user psychology over time.

Read about the project here.

Read the user documentation here

Table of Contents

Project Structure

The Honcho project is split between several repositories with this one hosting the core service logic. This is implemented as a FastAPI server/API to store data about an application's state.

There are also client-sdks that are created using Stainless. Currently, there is a Python and TypeScript/JavaScript SDK available.

Examples on how to use the SDK are located within each SDK repository. There is also SDK example usage available in the API Reference along with various guides.

Usage

Currently, there is a demo server of Honcho running at https://demo.honcho.dev. This server is not production ready and does not have an reliability guarantees. It is purely there for evaluation purposes.

A private beta for a tenant isolated production ready version of Honcho is currently underway. If interested fill out this typeform and the Plastic Labs team will reach out to onboard users.

Additionally, Honcho can be self-hosted for testing and evaluation purposes. See Contributing for more details on how to setup a local version of Honcho.

Configuration

Honcho uses a flexible configuration system that supports both TOML files and environment variables. Configuration values are loaded in the following priority order (highest to lowest):

  1. Environment variables
  2. .env file (for local development)
  3. config.toml file
  4. Default values

Using config.toml

Copy the example configuration file to get started:

cp config.toml.example config.toml

Then modify the values as needed. The TOML file is organized into sections:

  • [app] - Application-level settings (log level, host, port)
  • [db] - Database connection and pool settings
  • [auth] - Authentication configuration
  • [llm] - LLM provider and model settings
  • [agent] - Agent behavior settings
  • [deriver] - Background worker settings
  • [history] - Message history settings

Using Environment Variables

All configuration values can be overridden using environment variables. The environment variable names follow this pattern:

  • {SECTION}_{KEY} for nested settings
  • Just {KEY} for app-level settings

Examples:

  • DB_CONNECTION_URI - Database connection string
  • AUTH_JWT_SECRET - JWT secret key
  • LLM_DIALECTIC_MODEL - Dialectic LLM model
  • LOG_LEVEL - Application log level

Configuration Priority

When a configuration value is set in multiple places, Honcho uses this priority:

  1. Environment variables - Always take precedence
  2. .env file - Loaded for local development
  3. config.toml - Base configuration
  4. Default values - Built-in defaults

This allows you to:

  • Use config.toml for base configuration
  • Override specific values with environment variables in production
  • Use .env files for local development without modifying config.toml

Example

If you have this in config.toml:

[db]
CONNECTION_URI = "postgresql://localhost/honcho_dev"
POOL_SIZE = 10

You can override just the connection URI in production:

export DB_CONNECTION_URI="postgresql://prod-server/honcho_prod"

The application will use the production connection URI while keeping the pool size from config.toml.

Architecture

The functionality of Honcho can be split into two different services: Storage and Insights.

Storage

Honcho contains several different primitives used for storing application and user data. This data is used for managing conversations, modeling user psychology, building RAG applications, and more.

The philosophy behind Honcho is to provide a platform that is user-centric and easily scalable from a single user to a million.

Below is a mapping of the different primitives.

Apps
└── Users
    ├── Sessions
    │   └── Messages
    ├── Collections
    │   └── Documents
    └── Metamessages

Users familiar with APIs such as the OpenAI Assistants API will be familiar with much of the mapping here.

Apps

This is the top level construct of Honcho. Developers can register different Apps for different assistants, agents, AI enabled features, etc. It is a way to isolation data between use cases.

Users

Within an App everything revolves around a User. the User object literally represent a user of an application.

Sessions

The Session object represents a set of interactions a User has with an App. Other application may refer to this as a thread or conversation.

Messages

The Message represents an atomic interaction of a User in a Session. Messages are labeled as either a User or AI message.

Collections

At a high level a Collection is a named group of Documents. Developers familiar with RAG based applications will be familiar with these. Collections store vector embedded data that developers and agents can retrieve against using functions like cosine similarity.

Developers can create multiple Collections for a user for different purposes such as modeling different personas, adding third-party data such as emails and PDF files, and more.

Documents

As stated before a Document is vector embedded data stored in a Collection.

Metamessages

A Metamessage is similar to a Message with different use case. They are meant to be used to store intermediate inference from AI assistants or other derived information that is separate from the main User App interaction loop. For complicated prompting architectures like metacognitive prompting metamessages can store thought and reflection steps along with having developer information such as logs.

Each Metamessage is associated with a User with the ability to optionally tie to a Session and a Message.

Insights

The Insight functionality of Honcho is built on top of the Storage service. As Messages and Sessions are created for a User, Honcho will asynchronously reason about the User's psychology to derive facts about them and store them in a reserved Collection.

To read more about how this works read our Research Paper

Developers can then leverage these insights in their application to better server User needs. The primary interface for using these insights is through the Dialectic Endpoint.

This is a regular API endpoint that takes natural language requests to get data about the User. This robust design let's us use this single endpoint for all cases where extra personalization or information about the User is necessary.

A developer's application can treat Honcho as an oracle to the User and consult it when necessary. Some examples of how to leverage the Dialectic API include:

  • Asking Honcho for a theory-of-mind insight about the User
  • Asking Honcho to hydrate a prompt with data about the Users behavior
  • Asking Honcho for a 2nd opinion or approach about how to respond to the User

License

Honcho is licensed under the AGPL-3.0 License. Learn more at the License file