Packages

Elixir framework for building production-ready AI agents and LLM applications: type-safe schemas with JSON Schema generation, tool calling, streaming, multi-agent coordination, guardrails, and distributed fault-tolerant sessions, with first-class Anthropic Claude support.

Current section

Files

Jump to
normandy CHANGELOG.md
Raw

CHANGELOG.md

# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [0.1.0] - 2025-10-26
### Added
#### Core Foundation (Phases 1-7)
- **Schema System**: Macro-based DSL for defining agent I/O schemas with JSON Schema generation
- `Normandy.Schema` module with `schema` and `io_schema` macros
- Type system with casting, dumping, and loading via `Normandy.Type`
- Changeset-like validation with `Normandy.Validate`
- Support for parameterized and custom types
- **Agent System**: Core agent implementation with LLM integration
- `Normandy.Agents.BaseAgent` with init, run, and get_response methods
- `Normandy.Agents.BaseAgentConfig` for agent state management
- Context provider system for dynamic prompt injection
- Tool/function calling support via `Normandy.Agents.ToolCallResponse`
- **Memory Management**: Conversational history tracking
- `Normandy.Components.AgentMemory` with turn-based organization
- Message serialization and deserialization
- Configurable message history limits
- **Prompt System**: Structured prompt generation
- `Normandy.Components.SystemPromptGenerator` with section-based prompts
- `Normandy.Components.PromptSpecification` for prompt structure
- `Normandy.Components.ContextProvider` protocol for dynamic context
- **Streaming Responses**: Real-time LLM response streaming
- Streaming support in `Normandy.Agents.BaseAgent`
- Callback-based streaming with arity-2 callback support
- **Resilience Patterns**: Fault tolerance and reliability
- `Normandy.Resilience.Retry` with exponential backoff
- `Normandy.Resilience.CircuitBreaker` for preventing cascade failures
- Integration with BaseAgent for automatic retry on failures
- **Context Window Management**: Intelligent conversation management
- `Normandy.Context.WindowManager` for automatic context management
- `Normandy.Context.TokenCounter` for accurate token counting
- `Normandy.Context.Summarizer` for conversation summarization
- Support for Claude's prompt caching (up to 90% cost reduction)
#### Multi-Agent Coordination (Phase 8)
- **Agent Communication**: Message-based agent-to-agent communication
- `Normandy.Coordination.AgentMessage` for structured messaging
- `Normandy.Coordination.SharedContext` for stateless context sharing
- `Normandy.Coordination.StatefulContext` (GenServer + ETS) for stateful sharing
- **Orchestration Patterns**: Multiple coordination strategies
- `Normandy.Coordination.SequentialOrchestrator` for pipeline execution
- `Normandy.Coordination.ParallelOrchestrator` for concurrent execution
- `Normandy.Coordination.HierarchicalCoordinator` for manager-worker patterns
- Simple and advanced APIs for flexible usage
- **Agent Processes**: OTP-based agent supervision
- `Normandy.Coordination.AgentProcess` (GenServer wrapper)
- `Normandy.Coordination.AgentSupervisor` (DynamicSupervisor)
- Fault tolerance with Elixir/OTP patterns
#### Batch Processing
- **Concurrent Processing**: Efficient batch agent execution
- `Normandy.Batch.Processor` for concurrent batch processing
- Configurable concurrency limits
- Result aggregation and error handling
#### Integration & Testing (Phase 8.5)
- **Integration Tests**: Comprehensive real-world testing
- 56 integration tests with real Anthropic API calls
- Test helpers: `IntegrationHelper` and `NormandyIntegrationHelper`
- Tag-based test exclusion (`@moduletag :api`, `@moduletag :integration`)
- Coverage for multi-agent workflows, resilience, caching, and batch processing
- **LLM Client Integration**: Claudio HTTP client migration
- Updated to Claudio v0.1.1 from hex.pm
- Migrated from Tesla to Req HTTP client
- Streaming error handling for `Req.Response.Async`
### Fixed
- Orchestrator APIs: Fixed `extract_result` to return full response maps instead of just chat_message strings
- Function clause matching: Improved pattern matching for simple vs advanced orchestrator APIs
- Streaming callbacks: Fixed arity-2 callback support for streaming responses
### Documentation
- Comprehensive README with usage examples
- Project roadmap (ROADMAP.md) tracking implementation phases
- MIT License
- Hex.pm package metadata and documentation configuration
### Dependencies
- `elixir_uuid` ~> 1.2 - UUID generation for conversation turns
- `poison` ~> 6.0 - JSON encoding/decoding
- `claudio` ~> 0.1.1 - Anthropic Claude API client
- `dialyxir` ~> 1.4 (dev/test) - Static analysis
- `stream_data` ~> 1.1 (dev/test) - Property-based testing
- `ex_doc` ~> 0.34 (dev) - Documentation generation
### Test Coverage
- 380 unit tests (29 doctests + 21 properties + 380 tests)
- 56 integration tests (excluded by default)
- Total: 436 tests, all passing
[0.1.0]: https://github.com/thetonymaster/normandy/releases/tag/v0.1.0