Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

cecli logo

cecli is yet another cli agent crafted for extensibility and customization. For folks who like seeing under the hood, welcome to the fold. Made for nerds, geeks, and the extremely curious.

Links

Documentation Discord Chat Issue Queue

Installation Instructions

All installation methods export a cecli command that can start the application. This project can be installed using several methods:

Linux & Mac

Use curl to download the script and execute it with sh:

curl -LsSf https://cecli.dev/install.sh | sh

If your system doesn't have curl, you can use wget:

wget -qO- https://cecli.dev/install.sh | sh

Windows

powershell -ExecutionPolicy ByPass -c "irm https://cecli.dev/install.ps1 | iex"

Package Installation

uv pip install --native-tls cecli-dev

or

pip install cecli-dev

Tool Installation

uv tool install --native-tls --python python3.12 cecli-dev

Use the tool installation so cecli doesn't interfere with your development environment

Prompt Queue Management

The cecli CLI includes a prompt queueing feature (CLI-33) that allows users to manage multiple prompts in a first-in-first-out (FIFO) in-memory queue. The queue is tied to the user's CLI session and does not persist across restarts.

Queue Lifecycle

  1. Enqueue: /queue <prompt> adds a prompt to the queue.
  2. List: /list-queue displays all queued prompts with index numbers and timestamps.
  3. Remove: /remove-queue [index|*] removes a specific item by index, clears the entire queue with *, or provides interactive selection when called with no arguments.
  4. Auto-Process: After the current command completes and the system is idle (cmd_running_event is set), queued prompts are processed sequentially in FIFO order.

Commands

  • /queue <prompt text> — Adds a prompt to the queue. Confirms with the queue position.
  • /list-queue — Displays a numbered list of queued prompts ([index] text (timestamp)). Shows "Queue is empty" when appropriate.
  • /remove-queue <index> — Removes the prompt at the given 0-based index.
  • /remove-queue * — Clears the entire queue.
  • /remove-queue (no args) — Enters interactive selection mode.

Queue Limits

  • Max Queue Size: 100 items (hard limit). New prompts are rejected with a warning when the queue is full.
  • Max Prompt Length: 10,000 characters per queued item. Prompts exceeding this limit are rejected.
  • In-Memory Only: The queue is stored on the Commands instance (cecli/commands/core.py) and is lost when the CLI session restarts.

Queue Processing Integration

Queue processing is triggered in the finally block of Commands.execute() after cmd_running_event.set(). Management commands (queue, list-queue, remove-queue) are excluded from triggering auto-processing to prevent unexpected behavior. A _processing_queue boolean flag prevents infinite recursion if a queued prompt itself queues another item.

Example Workflow

# Queue multiple prompts
/queue "refactor database layer"
/queue "add unit tests for user service"

# View queued prompts
/list-queue
# Output: [1] refactor database layer (2026-08-01 10:30:00)
#         [2] add unit tests for user service (2026-08-01 10:30:05)

# Remove a specific queued prompt
/remove-queue 1

# Clear the entire queue
/remove-queue *

# Queued prompts process automatically after the current command completes

Management Command Guard

The management commands (/queue, /list-queue, /remove-queue) must not trigger auto-processing of queued items. Their execution is isolated so that the current prompt continues uninterrupted. When any of these commands is entered while another prompt is being processed, they execute immediately without clearing cmd_running_event or steering the ongoing command.

Thread Safety

The queue uses a single-threaded async event loop. List operations on prompt_queue are naturally safe within the async loop. An asyncio.Lock (_queue_lock) protects all read and write operations to ensure atomic updates.

The prompt queueing feature enhances the user experience by providing robust prompt management capabilities, increasing efficiency, and preventing interruptions during ongoing tasks.

The documentation above contains the full set of allowed configuration options but I highly recommend using an .cecli.conf.yml file. A good place to get started is:

model: <model of your choice>
agent: true
auto-commits: true
auto-save: true
cache-prompts: true
check-update: true
enable-context-compaction: true
context-compaction-max-tokens: 0.8
show-model-warnings: true

agent-config:
  large_file_token_threshold: 8192
  skip_cli_confirmations: false

mcp-servers:
  mcpServers:
    context7:
      transport: http
      url: https://mcp.context7.com/mcp

Use the adjacent .cecli.env file to store model api keys as environment variables, e.g:

ANTHROPIC_API_KEY="..."
GEMINI_API_KEY="..."
OPENAI_API_KEY="..."
OPENROUTER_API_KEY="..."
DEEPSEEK_API_KEY="..."

Run Program

If you are in the directory with your .cecli.conf.yml file, then simply running cecli will start the agent with your configuration. For best results, since terminal emulators can be finicky, we highly suggest running:

cecli --terminal-setup

On first run to configure keybindings for the program (notably shift+enter). Support for terminals is ongoing so feel free to make a github issue or chat in the discord for us to figure out what's needed to support automatically setting up a given terminal.

If you want additional sandboxing, we publish a docker container that can be ran as follows:

docker pull dustinwashington/cecli
docker run \
  -it \
  --user $(id -u):$(id -g) \
  --volume $(pwd):/app \
  --volume $(pwd)/.cecli.conf.yml:/.cecli.conf.yml \
  --volume $(pwd)/.cecli.env:/.cecli.env \
  dustinwashington/cecli \
  --config /.cecli.conf.yml
  --env-file /.cecli.env

This command will make sure all commands ran by the coding agent happen in context of the docker container to protect the host file system from any infamous agentic mishap

Documentation/Other Notes:

Project Roadmap/Goals

The current priorities are to improve core capabilities and user experience of the cecli project

  1. Base Asynchronicity (cecli coroutine-experiment branch)
  • Refactor codebase to have the main loop run asynchronously
  • Update test harness to work with new asynchronous methods
  1. Repo Map Accuracy - Discussion
  1. Context Discovery - Discussion
  • Develop AST-based search capabilities
  • Enhance file search with ripgrep integration
  • Implement RAG (Retrieval-Augmented Generation) for better code retrieval
  • Build an explicit workflow and local tooling for internal discovery mechanisms
  1. Context Delivery - Discussion
  • Use workflow for internal discovery to better target file snippets needed for specific tasks (ExploreCode and ReadRange)
  • Add support for partial files and code snippets in model completion messages
  • Update message request structure for optimal caching
  1. TUI Experience - Discussion
  • Add a full TUI (probably using textual) to have a visual interface competitive with the other coding agent terminal programs
  • Re-integrate pretty output formatting
  • Implement a response area, a prompt area with current auto completion capabilities, and a helper area for managing utility commands
  1. Agent Mode - Discussion
  • Renaming "navigator mode" to "agent mode" for simplicity
  • Add an explicit "finished" internal tool
  • Add a configuration json setting for agent mode to specify allowed local tools to use, tool call limits, etc.
  • Add a RAG tool for the model to ask questions about the codebase
  • Make the system prompts more aggressive about removing unneeded files/content from the context
  • Add a plugin-like system for allowing agent mode to use user-defined tools in simple python files
  • Add a dynamic tool discovery tool to allow the system to have only the tools it needs in context
  1. Sub Agents
  • Add /invoke-agent command to manually branch a sub agent and return a summary to the main context
  • Add an instance-able view of the conversation system so sub agents get their own context and workspaces
  • Modify coder classes to have discrete identifiers for themselves/management utilities for them to have their own slices of the world
  • Refactor global files like todo lists to live inside instance folders to avoid state conflicts
  • Add a Delegate tool that launches a sub agent as a background command that the parent model waits for to finish
  • Add visibility into active sub agent calls in TUI
  1. Hooks
  • Add hooks base class for user defined python hooks with an execute method with type and priority settings
  • Add hook manager that can accept user defined files and command line commands
  • Integrate hook manager with coder classes with hooks for start, end, on_message, end_message, pre_tool, and post_tool
  1. Efficient File Editing
  • Explore use of hashline file representation for more targeted file editing
  • Assuming viability, update SEARCH part of SEARCH/REPLACE with hashline identification (Done with new edit format)
  • Update agent mode edit tools to work with hashline identification
  • Update internal file diff representation to support hashline propagation
  1. Dynamic Context Management
  • Update compaction to use observational memory sub agent calls to generate decision records that are used as the compaction basis
  • Persist decision records to disk for sessions with some settings for managing lifetimes of such persistence
  • Integrate RLM to extract information from decision records on disk and other definable notes
  • Add a "describe" tool that launches a sub agent workflow that populates an RLM call's context with:
    • Current Conversation History
    • Past Decision Records
    • Repo Map Found Files
  1. Quality of Life
  • Add hot keys support for running repeatable commands like switching between preferred models
  • Unified error message logging inside of .cecli directory

All Contributors (Both Cecli and Aider main)

@paul-gauthier @dwash96 @tekacs @ErichBSchulz
@ei-grad @joshuavial @chrisnestrud @chr15m
@johbo @fry69 @quinlanjager @caseymcc
@shladnik @jamwil @itlackey @tomjuggler
@szmania @vk4s @titusz @bphd
@daniel-vainsencher @1broseidon @akaihola @jalammar
@schpet @iamFIREcracker JV @KennyDizi
@ivanfioravanti @mdeweerd @itsmeknt @fahmad91
@cheahjs @youknow04 @pjcreath @pcamp
@miradnanali @o-nix Jonathan Ellis @codeofdusk
@claui @jpshackelford @Taik @Hambaobao
@therealmarv @muravvv @hypn4 @gmoz22
@contributor @ctoth @thehunmonkgroup @gcp
@sentienthouseplant @ktakayama @lreeves @nims11
@preynal @tgbender @apaz-cli Alexander Kjeldaas
@zhyu Yutaka Matsubara @burnettk @cryptekbits
@deansher @kennyfrc @lentil32 @malkoG
@mubashir1osmani @TimPut @zjy1412 @savioursho
@jayeshthk @susliko @FeepingCreature @misteral
@aelaguiz @DhirajBhakta @gopar @eltociear
@tao12345666333 @jpshack-at-palomar @smh @nhs000
@sannysanoff @ryanfreckleton @mbokinala @yamitzky
@mobyvb @ozapinq @nicolasperez19 @varchasgopalaswamy
@ffluk3 @tanavamsikrishna @tylersatre @pcgeek86
@tamirzb @taha-yassine @strayer @StevenTCramer
@Skountz @sestrella @rnevius @holoskii
@Netzvamp @peterhadlaw @pauldw @paulmaunders
@omri123 @MatthewZMD @mbailey @golergka
@matfat55 @mtofano @maledorak @mlang
@marcomayer @you-n-g wangboxue @rti
@prmbiy @omarcinkonis @Oct4Pie @mark-asymbl
@yazgoo michal.sliwa @mdklab @mario7421
liam.liu kwmiebach @kAIto47802 @jvmncs
@hydai @hstoklosa @gordonlukch @develmusa
@coredevorg @cantalupo555 @caetanominuzzo @yzx9
@zackees @wietsevenema @krewenki @vinnymac
@szepeviktor @lattwood @spdustin @henderkes
@daysm @devriesd @daniel-sc @damms005
@curran @cclauss @cjoach @csala
@bexelbie @branchv @bkowalik @h0x91b
@aroffe99 @banjo @anjor @andreypopp
@ivnvxd @andreakeesys @ameramayreh @a1ooha
@maliayas @akirak @adrianlzt @codefromthecrypt
@aweis89 @aj47 @noitcudni @solatis
@webkonstantin @khulnasoft-bot @KebobZ @acro5piano
@josx @joshvera @jklina @jkeys089
@johanvts Jim White @gengjiawen @jevon
@jesstelford @JeongJuhyeon @jackhallam @Mushoz
@zestysoft Henry Fraser @gwpl @garrett-hopper
@filiptrplan @FelixLisczyk @evnoj @erykwieliczko
@elohmeier @emmanuel-ferdman

The current priorities are to improve core capabilities and user experience of the cecli project

  1. Base Asynchronicity (cecli coroutine-experiment branch)
  • Refactor codebase to have the main loop run asynchronously
  • Update test harness to work with new asynchronous methods
  1. Repo Map Accuracy - Discussion
  1. Context Discovery - Discussion - Done with Cymbal Library
  • Develop AST-based search capabilities
  • Enhance file search with ripgrep integration
  • Implement RAG (Retrieval-Augmented Generation) for better code retrieval
  • Build an explicit workflow and local tooling for internal discovery mechanisms
  1. Context Delivery - Discussion
  • Use workflow for internal discovery to better target file snippets needed for specific tasks (ExploreCode and ReadRange)
  • Add support for partial files and code snippets in model completion messages
  • Update message request structure for optimal caching
  1. TUI Experience - Discussion
  • Add a full TUI (probably using textual) to have a visual interface competitive with the other coding agent terminal programs
  • Re-integrate pretty output formatting
  • Implement a response area, a prompt area with current auto completion capabilities, and a helper area for managing utility commands
  1. Agent Mode - Discussion
  • Renaming "navigator mode" to "agent mode" for simplicity
  • Add an explicit "finished" internal tool
  • Add a configuration json setting for agent mode to specify allowed local tools to use, tool call limits, etc.
  • Add a RAG tool for the model to ask questions about the codebase
  • Make the system prompts more aggressive about removing unneeded files/content from the context
  • Add a plugin-like system for allowing agent mode to use user-defined tools in simple python files
  • Add a dynamic tool discovery tool to allow the system to have only the tools it needs in context
  1. Sub Agents
  • Add /invoke-agent command to manually branch a sub agent and return a summary to the main context
  • Add an instance-able view of the conversation system so sub agents get their own context and workspaces
  • Modify coder classes to have discrete identifiers for themselves/management utilities for them to have their own slices of the world
  • Refactor global files like todo lists to live inside instance folders to avoid state conflicts
  • Add a Delegate tool that launches a sub agent as a background command that the parent model waits for to finish
  • Add visibility into active sub agent calls in TUI
  1. Hooks
  • Add hooks base class for user defined python hooks with an execute method with type and priority settings
  • Add hook manager that can accept user defined files and command line commands
  • Integrate hook manager with coder classes with hooks for start, end, on_message, end_message, pre_tool, and post_tool
  1. Efficient File Editing
  • Explore use of hashline file representation for more targeted file editing
  • Assuming viability, update SEARCH part of SEARCH/REPLACE with hashline identification (Done with new edit format)
  • Update agent mode edit tools to work with hashline identification
  • Update internal file diff representation to support hashline propagation
  1. Dynamic Context Management (Accomplished with subagents, orchestrate, and the facts db)
  • Update compaction to use observational memory sub agent calls to generate decision records that are used as the compaction basis
  • Persist decision records to disk for sessions with some settings for managing lifetimes of such persistence
  • Integrate RLM-like facility to extract information from decision records on disk and other definable notes
  • Add a "describe" tool that launches a sub agent workflow that populates an RLM call's context with:
    • Current Conversation History
    • Past Decision Records
    • Repo Map Found Files
  1. Quality of Life
  • Add hot keys support for running repeatable commands like switching between preferred models
  • Unified error message logging inside of .cecli directory

All Contributors (Both Cecli and Aider main)

@paul-gauthier @dwash96 @tekacs @ErichBSchulz
@ei-grad @joshuavial @chrisnestrud @chr15m
@johbo @fry69 @quinlanjager @caseymcc
@shladnik @jamwil @itlackey @tomjuggler
@szmania @vk4s @titusz @bphd
@daniel-vainsencher @1broseidon @akaihola @jalammar
@schpet @iamFIREcracker JV @KennyDizi
@ivanfioravanti @mdeweerd @itsmeknt @fahmad91
@cheahjs @youknow04 @pjcreath @pcamp
@miradnanali @o-nix Jonathan Ellis @codeofdusk
@claui @jpshackelford @Taik @Hambaobao
@therealmarv @muravvv @hypn4 @gmoz22
@contributor @ctoth @thehunmonkgroup @gcp
@sentienthouseplant @ktakayama @lreeves @nims11
@preynal @tgbender @apaz-cli Alexander Kjeldaas
@zhyu Yutaka Matsubara @burnettk @cryptekbits
@deansher @kennyfrc @lentil32 @malkoG
@mubashir1osmani @TimPut @zjy1412 @savioursho
@jayeshthk @susliko @FeepingCreature @misteral
@aelaguiz @DhirajBhakta @gopar @eltociear
@tao12345666333 @jpshack-at-palomar @smh @nhs000
@sannysanoff @ryanfreckleton @mbokinala @yamitzky
@mobyvb @ozapinq @nicolasperez19 @varchasgopalaswamy
@ffluk3 @tanavamsikrishna @tylersatre @pcgeek86
@tamirzb @taha-yassine @strayer @StevenTCramer
@Skountz @sestrella @rnevius @holoskii
@Netzvamp @peterhadlaw @pauldw @paulmaunders
@omri123 @MatthewZMD @mbailey @golergka
@matfat55 @mtofano @maledorak @mlang
@marcomayer @you-n-g wangboxue @rti
@prmbiy @omarcinkonis @Oct4Pie @mark-asymbl
@yazgoo michal.sliwa @mdklab @mario7421
liam.liu kwmiebach @kAIto47802 @jvmncs
@hydai @hstoklosa @gordonlukch @develmusa
@coredevorg @cantalupo555 @caetanominuzzo @yzx9
@zackees @wietsevenema @krewenki @vinnymac
@szepeviktor @lattwood @spdustin @henderkes
@daysm @devriesd @daniel-sc @damms005
@curran @cclauss @cjoach @csala
@bexelbie @branchv @bkowalik @h0x91b
@aroffe99 @banjo @anjor @andreypopp
@ivnvxd @andreakeesys @ameramayreh @a1ooha
@maliayas @akirak @adrianlzt @codefromthecrypt
@aweis89 @aj47 @noitcudni @solatis
@webkonstantin @khulnasoft-bot @KebobZ @acro5piano
@josx @joshvera @jklina @jkeys089
@johanvts Jim White @gengjiawen @jevon
@jesstelford @JeongJuhyeon @jackhallam @Mushoz
@zestysoft Henry Fraser @gwpl @garrett-hopper
@filiptrplan @FelixLisczyk @evnoj @erykwieliczko
@elohmeier @emmanuel-ferdman

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cecli_dev-1.2.1rc1.tar.gz (2.2 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cecli_dev-1.2.1rc1-py3-none-any.whl (1.2 MB view details)

Uploaded Python 3

File details

Details for the file cecli_dev-1.2.1rc1.tar.gz.

File metadata

  • Download URL: cecli_dev-1.2.1rc1.tar.gz
  • Upload date:
  • Size: 2.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.7

File hashes

Hashes for cecli_dev-1.2.1rc1.tar.gz
Algorithm Hash digest
SHA256 b5d4efacae8fb654a1dfeb7c2c629d1b330ec3884358326dcfc99ba9741e034a
MD5 ff20dddcb590db4d1d4b95be2d3ce88f
BLAKE2b-256 d4e881f708931e251c33d8aae1f24dab6b15b90728cc0c4c623bd7a55626924d

See more details on using hashes here.

File details

Details for the file cecli_dev-1.2.1rc1-py3-none-any.whl.

File metadata

  • Download URL: cecli_dev-1.2.1rc1-py3-none-any.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.7

File hashes

Hashes for cecli_dev-1.2.1rc1-py3-none-any.whl
Algorithm Hash digest
SHA256 8542c888b178e78197c8541304881ff9a867eb257f652b8d186343d80611de8d
MD5 3cdd0adf5c78a93f572f291fe560569d
BLAKE2b-256 f40e40d64ad6ef5256f3daffe6ab727c79e2a93b09057fae44e380589260ccd3

See more details on using hashes here.

Release history Release notifications | RSS feed

1.4.0

2 files

1.3.1

2 files

1.3.0

2 files

1.2.3

2 files

1.2.2

2 files

1.2.1

2 files

This release

1.2.1rc1 This release

2 files

1.2.0

2 files

1.1.0

2 files

1.0.5

2 files

1.0.4

2 files

1.0.3

2 files

1.0.2

2 files

1.0.1

2 files

1.0.0

2 files

0.100.14

2 files

0.100.13

2 files

0.100.12

2 files

0.100.11

2 files

0.100.10

2 files

0.100.9

2 files

0.100.8

2 files

0.100.7

2 files

0.100.6

2 files

0.100.5

2 files

0.100.4

2 files

0.100.3

2 files

0.100.2

2 files

0.100.1

2 files

0.100.0

2 files

0.99.12

2 files

0.99.11

2 files

0.99.10

2 files

0.99.9

2 files

0.99.8

2 files

0.99.7

2 files

0.99.6

2 files

0.99.5

2 files

0.99.4

2 files

0.99.3

2 files

0.99.2

2 files

0.99.1

2 files

0.99.0

2 files

0.98.2

2 files

0.98.1

2 files

0.98.0

2 files

0.97.5

2 files

0.97.4

2 files

0.97.3

2 files

0.97.2

2 files

0.97.1

2 files

0.97.0

2 files

0.96.10

2 files

0.96.9

2 files

0.96.8

2 files

0.96.7

2 files

0.96.6

2 files

0.96.5

2 files

0.96.4

2 files

0.96.3

2 files

0.96.2

2 files

0.96.1

2 files

0.96.0

2 files

0.95.11

2 files

0.95.10

2 files

0.95.9

2 files

0.95.8

2 files

0.95.7

2 files

0.95.6

2 files

0.95.5

2 files

0.93.4

2 files

0.93.3

2 files

0.93.1

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page