# cortexa — Elixir Git-inspired context management for LLM agents — **COMMIT**, **BRANCH**, **MERGE**, and **CONTEXT** operations over a persistent versioned memory workspace. Based on the paper *"Git Context Controller: Manage the Context of LLM-based Agents like Git"* ([arXiv:2508.00031](https://arxiv.org/abs/2508.00031)). ## Install Add to your `mix.exs`: ```elixir def deps do [ {:cortexa, "~> 0.1.1"} ] end ``` ## Quick Start ```elixir alias Cortexa.{Workspace, Models} # Create workspace ws = Workspace.new("/tmp/my-project") ws = Workspace.init(ws, "Build an AI agent") # Log observations {ws, _ota} = Workspace.log_ota(ws, "User asked about weather", "Need to call API", "Called weather API") # Commit milestone {ws, _commit} = Workspace.commit(ws, "Implemented weather lookup") # Branch for exploration ws = Workspace.branch(ws, "alt-approach", "Try different API") {ws, _ota} = Workspace.log_ota(ws, "Testing new API", "Seems faster", "Switched to new API") {ws, _commit} = Workspace.commit(ws, "New API integration") # Merge back {ws, _merge} = Workspace.merge(ws, "alt-approach", nil, "main") # Retrieve context ctx = Workspace.context(ws, "main", 3) IO.puts(Models.context_summary(ctx)) ``` ## API ### `Cortexa.Workspace` | Function | Description | |----------|-------------| | `new(root)` | Create workspace handle | | `init(ws, roadmap \\ "")` | Initialize `.GCC/` directory | | `load(ws)` | Attach to existing workspace | | `log_ota(ws, obs, thought, action)` | Append OTA record | | `commit(ws, contribution, prev \\ nil, roadmap \\ nil)` | Create milestone commit | | `branch(ws, name, purpose)` | Create isolated branch | | `merge(ws, branch, summary \\ nil, target \\ "main")` | Merge branch into target | | `context(ws, branch \\ nil, k \\ 1)` | Retrieve hierarchical context | | `switch_branch(ws, name)` | Switch active branch | | `list_branches(ws)` | List all branches | ### Functional Style The Elixir implementation uses a functional approach — workspace state is an immutable struct returned from each operation: ```elixir ws = Workspace.new("/tmp/project") |> Workspace.init() {ws, _} = Workspace.log_ota(ws, "obs", "thought", "action") {ws, _} = Workspace.commit(ws, "milestone") ``` ## License MIT