Metadata-Version: 2.4
Name: harny-ai
Version: 0.1.5
Summary: Installs harny, the official Python SDK for Harny: per-user memory, connected accounts, permitted actions and the action record for your agents.
Author-email: Harny <platform@harny.ai>
License: Apache-2.0
Project-URL: Homepage, https://harny.ai
Project-URL: Documentation, https://harny.ai/docs/memory-api/quickstart
Keywords: harny,memory,agent-memory,api,sdk
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: harny>=0.1.2
Dynamic: license-file

This package installs [`harny`](https://pypi.org/project/harny/).

# Harny Python SDK

Harny is the backbone of your agent harness: per-user memory that stays accurate as facts change, connected accounts, permitted actions and the action record for your agents, behind one API key. This package is the Python client for all of it, plus an agent loop that runs on your own model key, including long jobs.

#1 on BEAM at 128K tokens, the public benchmark for long-term memory in agents. [Results and methodology](https://harny.ai/benchmarks)

Documentation: [Quickstart](https://harny.ai/docs/memory-api/quickstart) · [Memory API overview](https://harny.ai/docs/memory-api/overview)

## Installation

```
pip install harny
```

Requires Python 3.10+.

## Key

Sign up at [console.harny.ai](https://console.harny.ai/signup) and create an app key, or run `harny init` in your project folder and the key is saved to `.env`. The client reads it from `HARNY_API_KEY`.

## Quickstart

```python
from harny import SyncHarnyClient

with SyncHarnyClient() as harny:  # reads HARNY_API_KEY
    harny.provision_user("demo-user", "demo@example.com")  # add each person once; repeating it is safe
    receipt = harny.ingest_data_point(
        "Budget for the Acme pilot moved to 40k.",
        timestamp="2026-07-28T16:00:00Z",
        user="demo-user",
    )
    harny.wait_for_ingestion(receipt.ingestionId, user="demo-user")
    page = harny.recall("What is the Acme pilot budget?", user="demo-user")
    print(page.results[0].content)
```

`user` names the person; each recall returns that person's memory and nothing from anyone else's. `HarnyClient` is the async client: `async with HarnyClient() as harny:` and `await` each call.

The same calls from the command line: `harny ingest "<fact>" --user <id>` and `harny query "<question>" --user <id>`.

## Methods

- `ingest_data_point` — send one fact with the time it happened. The same `id` with changed text replaces the old memory.
- `ingest_batch` — send 1 to 1,000 facts at once.
- `get_ingestion` / `wait_for_ingestion` — `processing`, `completed` or `failed`. `nothingNew` is true when the send added nothing new.
- `recall` — ranked, dated facts for a question; `level` (`low` to `extra-high`) or `max_tokens` sets how much comes back.
- `delete_data_point`, `delete_data_points`, `delete_ingestion` — remove a fact, or a whole send, and the memories that rest only on it.
- `get_usage` — this month's usage for the app.

For agents, the client also has `provision_user`, `assemble_context`, `record_action` and `list_actions`. See the [agent harness overview](https://harny.ai/docs/agent-harness/overview).

## Errors

```python
from harny import HarnyAPIError, HarnyConnectionError

try:
    page = harny.recall("What is the Acme pilot budget?", user="demo-user")
except HarnyConnectionError:
    ...  # nothing reached Harny; retry
except HarnyAPIError as e:
    print(e.status_code, e.error_code, e.recovery_hint, e.retry_after_s)
```

## Where next

- [Quickstart](https://harny.ai/docs/memory-api/quickstart) in cURL, Python and TypeScript
- [Memory API overview](https://harny.ai/docs/memory-api/overview)
- [MCP server](https://harny.ai/docs/mcp/overview) for Claude, Cursor, VS Code and other MCP clients
- [support@harny.ai](mailto:support@harny.ai)

## License

Apache-2.0.
