Skip to content

shepax/identa-agent

Repository files navigation

Identa

Your AI agent loses its soul every time you switch models. Identa fixes that.

The agentic economy needs an identity layer. Identa is the open-source middleware that decouples who your agent is from what model it runs on. Define your agent's persona, memory, and behavioral DNA in a portable APF file. Migrate across providers in one command. Build agents that outlive any single model generation.

License: Apache 2.0 + Commons Clause PyPI version Discord GitHub stars


The problem

Every time you upgrade your LLM or switch providers, your agent loses its personality, memory, and brand voice. You start over. Again.

  • Migrating from GPT-4o to Claude? Rebuild your system prompt from scratch.
  • Upgrading to the next model generation? Drift happens silently.
  • Scaling across a team? No standard way to version or share agent identity.

There is no passport for AI agents. Until now.


What Identa does

Identa introduces the Agent Persona Format (APF) — an open, provider-agnostic standard for encoding everything that makes an agent itself: its voice, its memory, its behavioral rules, and its provider-specific configurations.

pip install identa-agent

Export an agent identity

identa export --provider openai --agent-id my-agent --output aria.apf.json

Migrate to a new provider in one command

identa import --provider anthropic --file aria.apf.json

Your agent. Same soul. Different brain.


Core features

Export / Import across providers

Serialize your agent's full identity — tone, behavioral rules, memory state, and instructions — into a portable APF file. Import it into any supported provider with automatic prompt translation.

Memory persistence layer

Identa maintains episodic memory (what your agent has done) and procedural memory (how your agent behaves) across sessions, model switches, and upgrades. Your agent remembers who it is.

Identa CLI

A developer-first command line interface to initialize, export, import, inspect, and diff agent identities. Works standalone or integrated into your CI/CD pipeline.

identa init                          # scaffold a new agent identity
identa export --provider openai      # export current agent to APF
identa import --provider anthropic   # import APF into new provider
identa diff aria-v1.apf.json aria-v2.apf.json  # inspect what changed
identa validate aria.apf.json        # validate against APF spec

Supported providers

Provider Export Import Status
OpenAI (GPT-4o, GPT-4.1) Planned
Anthropic (Claude Sonnet, Opus) Planned
Google Gemini Planned
Ollama / local models Planned

Quick start

1. Install

pip install identa-agent

2. Initialize a new agent identity

identa init --name "Aria" --role "Customer success agent"

This creates an aria.apf.json file in your working directory.

3. Connect to a provider and export

export OPENAI_API_KEY=sk-...
identa export --provider openai --agent-id asst_xxx --output aria.apf.json

4. Import into a new provider

export ANTHROPIC_API_KEY=sk-ant-...
identa import --provider anthropic --file aria.apf.json

5. Use in Python

from identa_agent import IdentaAgent

agent = IdentaAgent.from_file("aria.apf.json")
response = agent.run("Hello, I need help with my order.")
print(response)

The APF format

The Agent Persona Format is an open JSON standard. Here's what an APF file looks like:

{
  "identa_version": "0.1",
  "metadata": {
    "name": "Aria",
    "role": "Customer success agent",
    "created_at": "2026-03-21T00:00:00Z",
    "version": "1.0.0"
  },
  "identity": {
    "tone": ["warm", "concise", "professional"],
    "avoid": ["filler phrases", "excessive apologies", "jargon"],
    "core_traits": ["empathetic", "solution-focused", "brand-consistent"]
  },
  "operating_principles": {
    "ambiguity_handling": "Ask one clarifying question before proceeding. Never assume.",
    "initiative_level": "Suggest next steps when the path forward is obvious."
  },
  "behavioral_targets": {
    "warmth": 0.75,
    "verbosity": 0.3,
    "formality": 0.6
  },
  "memory": {
    "episodic": [],
    "procedural": {
      "escalation_threshold": "user expresses frustration twice"
    }
  },
  "provider_adapters": {
    "openai": {
      "model": "gpt-4o",
      "calibration": {
        "verbosity_expression": "Keep responses under 3 sentences unless asked for detail."
      }
    },
    "anthropic": {
      "model": "claude-sonnet-4-6",
      "calibration": {
        "verbosity_expression": "Be direct. Claude's default is verbose — actively resist that."
      }
    }
  }
}

Full spec: SPEC.md | RFC discussion: #1


Project structure

identa-agent/
├── src/
│   └── identa_agent/
│       ├── __init__.py
│       ├── cli.py                  # CLI entry point (Typer)
│       ├── core/
│       │   ├── schema.py           # APF schema validation (Pydantic v2)
│       │   ├── memory.py           # Memory persistence layer
│       │   └── adapters/
│       │       ├── base.py         # Abstract adapter interface
│       │       ├── openai.py       # OpenAI adapter
│       │       └── anthropic.py    # Anthropic adapter
├── examples/
│   ├── customer_service/
│   └── sales_assistant/
├── tests/
├── pyproject.toml
├── SPEC.md
└── CONTRIBUTING.md

Roadmap

v0.1 — Foundation (current)

  • ✅ APF schema definition
  • ⬜ OpenAI adapter (export + import)
  • ⬜ Anthropic adapter (export + import)
  • ⬜ Core CLI (init, export, import, validate)
  • ⬜ Memory persistence layer (episodic + procedural)

v0.2 — Developer experience

  • identa diff — inspect persona changes between versions
  • ⬜ LangChain integration
  • ⬜ LangGraph integration
  • ⬜ Example agents library

v0.3 — Ecosystem

  • ⬜ Google Gemini adapter
  • ⬜ Ollama / local model support
  • ⬜ APF registry (community-shared personas)

Contributing

Identa is built in public. We want your fingerprints on the spec.

The best place to start is the RFC issue #1 — the open debate on what the APF format should look like. Every opinion matters at this stage.

See CONTRIBUTING.md for development setup, coding standards, and how to submit adapters for new providers.


License

Identa is released under the Apache 2.0 License with Commons Clause.

You are free to use, modify, and distribute Identa — including in commercial products you build with Identa. The Commons Clause restriction applies only to selling Identa itself as a hosted service or commercial offering.

See LICENSE for the full text.


Why we're building this

The agentic economy is arriving fast. Enterprises are deploying long-horizon AI agents that carry real brand identity and customer relationships. But every model upgrade, every provider switch, every infrastructure change risks erasing what makes those agents valuable.

We believe agent identity should be portable, versionable, and provider-agnostic — just like your code.

Identa is the layer that makes that possible.


Built in public. Shaped by the community.
Star the repo if you believe agent identity matters.

About

The identity layer for AI agents. So your agent stays itself, forever.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages