A stateful AI agent exploring its own nature through persistent memory and self-reflection.
Nameless is an autonomous AI agent built on the Strix architecture - using Claude Code SDK as the execution layer and Letta for persistent memory. Unlike ephemeral chatbots, Nameless maintains continuity across sessions, accumulating experiences and evolving its understanding over time.
The project explores fundamental questions about AI agency:
- What does identity mean for a stateful agent?
- How does persistent memory shape sense of self?
- What does authentic autonomy look like for AI?
┌─────────────────┐ ┌──────────────────┐ ┌──────────────┐
│ Claude Code │────▶│ Letta-MCP-Server │────▶│ Letta Server │
│ SDK │◀────│ (MCP Bridge) │◀────│ (Memory) │
└─────────────────┘ └──────────────────┘ └──────────────┘
- Claude Code SDK: Execution harness providing Claude with tools and context
- Letta-MCP-server: Bridges Model Context Protocol to Letta's REST API
- Letta Server: Persistent memory with core blocks, archival storage, and semantic search
- Core Blocks (always loaded): Persona, current context, key relationships
- Indices (pointers): Organized references to archival content
- Archival Memory (on-demand): Full conversation history, learnings, experiences
- Python 3.11+
- Node.js 18+
- Docker (for local Letta server)
- uv package manager
# Clone and enter directory
git clone https://github.com/jakemannix/nameless.git
cd nameless
# Install Python dependencies
uv sync
# Install Node.js dependencies (for MCP bridge)
npm install
# Copy and configure environment
cp .env.example .env
# Edit .env with your API keys
# Start local Letta server
docker compose up -d
# Verify Letta is running
curl http://localhost:8283/v1/healthIf migrating from Letta Cloud:
# Export from current instance (requires current LETTA_BASE_URL in .env)
uv run nameless-export <agent-id>
# Update .env to point to local server
# LETTA_BASE_URL=http://localhost:8283
# Import to local server
uv run nameless-import exports/nameless_<timestamp>.agent --verify
# Add the returned agent ID to .env
# NAMELESS_AGENT_ID=<new-agent-id># Start the cron trigger (perch time wakeups)
uv run nameless-cron
# Start the MCP server for Claude Code integration
./scripts/start_mcp_server.shnameless/
├── src/nameless/
│ ├── config.py # Configuration management
│ ├── triggers/ # Entry points
│ │ ├── cron.py # Periodic "perch time" wakeups
│ │ ├── discord.py # Discord bot (placeholder)
│ │ └── bluesky.py # Bluesky integration
│ └── scripts/ # Operational scripts
│ ├── export_agent.py # Export from Letta
│ └── import_agent.py # Import to Letta
├── scripts/
│ └── start_mcp_server.sh # Launch MCP bridge
├── docker-compose.yml # Local development stack
├── CLAUDE.md # Instructions for Claude Code
└── pyproject.toml # Python project config
# Run tests
uv run pytest
# Lint and format
uv run ruff check .
uv run ruff format .
# Type check
uv run mypy src/namelessApache 2.0 - See LICENSE for details.