cogiteer

A command-line agentic cross-LLM session orchestrator.

cogiteer

A command-line cross-LLM session orchestrator. Start a conversation with one provider, continue it with another, and keep the whole thing on disk in a format neither provider owns.

WARNING: This tool is a work in progress and in development until this warning is removed.

See DISCLOSURE for information how AI is used by this project.

The point

Every vendor stores a conversation in its own shape, so moving one between them loses something — usually quietly. liaison, the shard this tool is built on, keeps the conversation in a canonical portable form and translates at the edges, reporting what each handoff cost rather than pretending it was free.

cogiteer is that made usable from a terminal: one invocation, one call to a provider, one saved result. Sessions live in files, so the conversation outlives the process that started it and can be picked up on a different deployment tomorrow.

Verbs

cogiteer start <deployment> <prompt...> [--id <session-id>] [--stream|--no-stream]
                                        [--show-reasoning|--hide-reasoning]
cogiteer continue <session-id> <prompt...> [--on <deployment>] [--stream|--no-stream]
                                           [--show-reasoning|--hide-reasoning]
cogiteer list
cogiteer show <session-id> [--snapshots] [--json]
cogiteer prune <session-id> --keep <n>
cogiteer delete <session-id>
$ cogiteer start ollama "Name three things Vienna is known for."
Session: brisk-comet
Vienna is known for its coffee houses, its classical music, and the Ringstrasse.

$ cogiteer continue brisk-comet "Recommend one coffee house." --on anthropic
Café Sperl, for the billiard tables and the lack of hurry.

The second command is the whole pitch: a different vendor, a different wire protocol, the same conversation. continue works out which deployment last answered by reading it off the session itself, so --on is only needed when you want to switch.

The reply is the only thing on stdout. Session ids, warnings and reasoning all go to stderr, so cogiteer start ... > answer.txt gets an answer and nothing else.

Configuration

Deployments are named in cogiteer.yaml, found via $COGITEER_CONFIG, then $CWD, then $HOME. Two tables and a block: a server is a url plus the protocol it speaks, a deployment names one model on one server, and defaults is how the CLI itself behaves.

servers:
  ollama:
    url: http://localhost:11434/v1
    protocol: chat_completions
  anthropic:
    url: https://api.anthropic.com/v1
    protocol: anthropic
    credential_env: ANTHROPIC_API_KEY

deployments:
  ollama:
    server: ollama
    model: qwen3:8b
  anthropic:
    server: anthropic
    model: claude-sonnet-4-5

defaults:
  streaming: false
  show_reasoning: false

Sessions are stored under $COGITEER_HOME, else ./.cogiteer if it exists, else ~/.cogiteer — one folder per session, one snapshot per turn.

See docs/DESIGN.md for the full format, the verb grammar, and why each is shaped the way it is.

Installation

$ shards install
$ shards build --release

Puts cogiteer in bin/. Requires Crystal 1.19 or newer.

Documentation

Document Holds
docs/DESIGN.md Config, session storage, verb grammar, and why
liaison The shard underneath: protocols, MPSH, handoffs

Contributions, by invitation!

With apologies, at this time contributions to this project are by invitation only and limited to people I know and see often.

  • These are early days for the project and I am busy with family and work.
  • At this time I want to work on this at a manageable pace.

License

MPL-2.0. See LICENSE.

Repository

cogiteer

Owner
Statistic
  • 0
  • 0
  • 0
  • 0
  • 3
  • about 6 hours ago
  • September 13, 2026
License

Mozilla Public License 2.0

Links
Synced at

Sun, 13 Sep 2026 07:15:59 GMT

Languages