Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
18012df
chore: reasoning specs
May 2, 2026
e7bc0aa
feat: reasoning-middleware
May 2, 2026
1f1c8f5
feat: context-compression
May 3, 2026
6a45db6
feat: implement effort-conditional CRP and headless batch mode
May 3, 2026
c717c76
refactor: upgrade batch eval framework to scientific-grade
May 3, 2026
2c987d7
feat: add eval-diff command to compare batch runs
May 3, 2026
dcd3b0f
feat: add init command and baseline v1 dataset
May 3, 2026
de4d5ed
feat: add dangerously-auto-approve flag and Dockerfile.eval
May 3, 2026
a96d055
chore: add procedural dataset generator and 200 expanded tasks
May 3, 2026
51d1b15
chore: add summarize_run script to view single batch metrics
May 3, 2026
6086eb4
feat: stream-pause
May 5, 2026
11f93f7
refactor: retry-loop
May 5, 2026
90edeab
Refactor: agent-loop
May 5, 2026
69d02bc
fix: Context-window
May 6, 2026
5cea9a8
fix: preset
May 6, 2026
a8a7da2
chore: ignore website/ on feature branch
May 13, 2026
5dc687d
feat: add cinto index — kernel repo indexer
May 13, 2026
6b4142f
feat: add kernel search — scoped ripgrep syscall
May 13, 2026
dbf2c0a
feat: add kernel read syscalls — read_range, read_around, list_symbols
May 13, 2026
b306872
feat: add kernel context pack assembler
May 13, 2026
268ccdb
feat: add kernel worker loop with pipeline architecture
May 13, 2026
099c16d
feat: wire kernel mode into TUI
May 13, 2026
ceb4eff
test: kernel unit tests + kernel batch runner
May 13, 2026
7ad4dd9
feat: add lm-studio-small preset + kernel budget flag
May 13, 2026
3580dbe
feat: add cinto presets + use-preset commands, fix batch dir creation
May 13, 2026
fb0a5c7
feat: plain-text fallback for models that don't follow CRP format
May 14, 2026
0f11e14
feat: add per-stage one-shot CRP examples to kernel system prompt
May 14, 2026
55cf933
fix: use bare paths in locate one-shot example
May 14, 2026
ade697f
feat: add --context and --max-tokens flags to use-preset
May 14, 2026
476cc69
fix: strip <think>...</think> blocks before CRP parsing
May 14, 2026
30b7fd4
feat: trace logging for fine-tuning dataset generation
May 14, 2026
84d819f
feat: locate stage fallback — skip instead of failing the pipeline
May 14, 2026
4f9972d
feat: add patch applier — kernel can now write files
May 14, 2026
a67654f
feat: add qwen3 preset + no_think config field
May 14, 2026
5ff5330
fix: save config on setup exit via Esc/Tab
May 14, 2026
276b578
feat: run validation command after kernel patch application
May 14, 2026
80cf233
fix: include full file content in patch stage context pack
May 15, 2026
a1e2761
feat: add Python eval tasks + indentation-based function replacement
May 15, 2026
9f59fdf
chore: gitignore __pycache__ and .pyc files
May 15, 2026
7c25582
fix: append new function when replace_function target not found
May 15, 2026
ba95e9a
fix: cap patch stage file content at 80 lines to protect small contexts
May 15, 2026
d315a8e
fix: detect actual context window before kernel batch, auto-size budget
May 15, 2026
c20d474
feat: local memory + fix class method patch example
May 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,9 @@ docs/.obsidian/
docs/obsidian/
/wiki/
/wifi/
/website/
eval/results/
eval/traces/
eval/training/
**/__pycache__/
**/*.pyc
18 changes: 18 additions & 0 deletions Dockerfile.eval
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Use the official Rust image as a builder
FROM rust:1.77 as builder
WORKDIR /usr/src/cinto
COPY . .
RUN cargo build --release

# Run stage
FROM debian:bookworm-slim
# Install basic dependencies for eval (git, nodejs, etc if needed by fixtures)
RUN apt-get update && apt-get install -y git ca-certificates curl build-essential && rm -rf /var/lib/apt/lists/*
# Install rust in the runtime image because we run `cargo test` in eval jobs!
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
ENV PATH="/root/.cargo/bin:${PATH}"

COPY --from=builder /usr/src/cinto/target/release/cinto /usr/local/bin/cinto

WORKDIR /eval
ENTRYPOINT ["cinto", "batch", "--dangerously-auto-approve"]
30 changes: 24 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ servers.** It gives local and open-weight models a focused workspace loop:
read files, search code, propose edits, keep todos, inspect prompts, and stay
inside explicit safety rails.

[Português](README_pt.md) · [Architecture notes](docs/architecture.md)
[Português](README_pt.md) · [Architecture notes](docs/architecture.md) · [CRP spec](docs/CRP_SPEC.md)

![Cinto TUI](docs/demo.png)

Expand All @@ -30,6 +30,8 @@ Most coding agents hide the harness. Cinto keeps it visible.
workspace root.
- **Context management:** large tool outputs and older transcript history are
compacted before they overwhelm the model context window.
- **Reasoning protocol draft:** CRP explores typed, auditable reasoning traces
for small and compressed coding agents.

## Install

Expand Down Expand Up @@ -129,8 +131,8 @@ explicit `/v1/completions` endpoint for text-completion servers.

| Server | Example endpoint | Recommended format | Notes |
| --- | --- | --- | --- |
| LM Studio with `gpt-oss` | `http://127.0.0.1:1234` | `harmony` | Use the model id shown by LM Studio. |
| LM Studio with Qwen/Llama | `http://127.0.0.1:1234` | `openai-tools` | Set `thinking_effort = "none"`. |
| LM Studio with `gpt-oss` | `http://127.0.0.1:1234` | `harmony` | Default transport. CRP reasoning is enabled by default. |
| LM Studio with Qwen/Llama | `http://127.0.0.1:1234` | `openai-tools` | Set `thinking_effort = "none"`; use `no_think = true` for Qwen3-class models. |
| Ollama | `http://127.0.0.1:11434` | `openai-tools` | Pull a tool-capable model such as `qwen2.5-coder:7b-instruct`. |

Example Ollama flow:
Expand All @@ -148,6 +150,7 @@ endpoint = "http://127.0.0.1:11434"
model = "qwen2.5-coder:7b-instruct"
format = "openai-tools"
thinking_effort = "none"
no_think = false
```

## TUI Workflow
Expand Down Expand Up @@ -228,6 +231,8 @@ api_key_env = ""
max_tokens = 4096
temperature = 0.2
thinking_effort = "medium" # none, low, medium, high
no_think = false # prepends no_think_prefix to system prompts when true
no_think_prefix = "/no_think" # set to "<no_think>" for servers/templates that expect it
stream = true
stop = ["<|return|>", "<|call|>"]
request_timeout_secs = 600
Expand All @@ -237,7 +242,12 @@ context_window = 8192
workspace = "/home/you/project"
allow_shell = false
require_edit_approval = true
reasoning_protocol = "crp" # crp or plain
crp_retry_budget = 3
transport_retry_budget = 1
empty_response_retry_budget = 1
max_tool_turns = 16
max_model_rounds = 64
auto_context_compression = true
context_compression_threshold = 80
context_compression_keep_recent = 18
Expand All @@ -249,16 +259,24 @@ developer_prompt = "Use concise reasoning, ask before destructive actions, and p
When `api_key_env` is set, Cinto reads the secret from that environment variable
and sends it as a bearer token. The TUI stores the variable name, not the secret.

## Supported Tool Formats
## Supported Tool Formats And Reasoning

| Format | Tool-calling shape | Best fit |
| --- | --- | --- |
| `harmony` | Tool calls embedded in Harmony-style assistant text | `gpt-oss-20b`, `gpt-oss-120b`, and Harmony-compatible servers |
| `openai-tools` | Native OpenAI-compatible `tools` and `tool_calls` fields | Qwen, Llama, Ollama, LM Studio, and other OpenAI-compatible chat servers |

`harness.reasoning_protocol = "crp"` is enabled by default and works with both
tool formats. It asks the model to return final answers as CRP slot traces while
leaving tool invocation to the selected transport.

If the model keeps requesting tools without answering, raise `max_tool_turns` or
ask for a narrower step. If the model returns neither text nor a tool call,
Cinto shows an `Empty Model Response` note with the active model and format.
ask for a narrower step. `max_model_rounds`, `crp_retry_budget`,
`transport_retry_budget`, and `empty_response_retry_budget` are tracked
separately so protocol repairs and transient request failures do not consume
tool-call budget. If the model returns neither text nor a tool call after the
empty-response retry budget is exhausted, Cinto shows an `Empty Model Response`
note with the active model and format.

## Development

Expand Down
18 changes: 14 additions & 4 deletions README_pt.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Cinto

[English](README.md) · [Notas de arquitetura](docs/architecture.md)
[English](README.md) · [Notas de arquitetura](docs/architecture.md) · [Spec CRP](docs/CRP_SPEC.md)

![Cinto TUI](docs/demo.png)

Expand All @@ -26,6 +26,8 @@ A maioria dos agentes esconde o harness. O Cinto deixa a engrenagem visível.
- **Contexto persistente:** suporte opcional a `AGENTS.md` na raiz do projeto.
- **Gestão de contexto:** resultados grandes e histórico antigo são compactados
antes de estourar a janela do modelo.
- **Protocolo de raciocínio:** CRP explora traces tipados e auditáveis para
agentes de código pequenos ou comprimidos.

## Instalação

Expand Down Expand Up @@ -126,8 +128,8 @@ texto.

| Servidor | Endpoint | Formato recomendado | Observação |
| --- | --- | --- | --- |
| LM Studio com `gpt-oss` | `http://127.0.0.1:1234` | `harmony` | Use o model id mostrado pelo LM Studio. |
| LM Studio com Qwen/Llama | `http://127.0.0.1:1234` | `openai-tools` | Use `thinking_effort = "none"`. |
| LM Studio com `gpt-oss` | `http://127.0.0.1:1234` | `harmony` | Transporte padrão. Reasoning CRP vem ligado por padrão. |
| LM Studio com Qwen/Llama | `http://127.0.0.1:1234` | `openai-tools` | Use `thinking_effort = "none"`; para modelos Qwen3, use `no_think = true`. |
| Ollama | `http://127.0.0.1:11434` | `openai-tools` | Use um modelo com tools, como `qwen2.5-coder:7b-instruct`. |

Exemplo com Ollama:
Expand All @@ -145,6 +147,7 @@ endpoint = "http://127.0.0.1:11434"
model = "qwen2.5-coder:7b-instruct"
format = "openai-tools"
thinking_effort = "none"
no_think = false
```

## Fluxo no TUI
Expand Down Expand Up @@ -222,6 +225,8 @@ api_key_env = ""
max_tokens = 4096
temperature = 0.2
thinking_effort = "medium" # none, low, medium, high
no_think = false # prefixa no_think_prefix nos system prompts quando true
no_think_prefix = "/no_think" # use "<no_think>" se o template/servidor exigir
stream = true
stop = ["<|return|>", "<|call|>"]
request_timeout_secs = 600
Expand All @@ -231,6 +236,7 @@ context_window = 8192
workspace = "/home/you/project"
allow_shell = false
require_edit_approval = true
reasoning_protocol = "crp" # crp ou plain
max_tool_turns = 16
auto_context_compression = true
context_compression_threshold = 80
Expand All @@ -243,13 +249,17 @@ developer_prompt = "Use concise reasoning, ask before destructive actions, and p
Quando `api_key_env` é definido, o Cinto lê o segredo dessa variável de ambiente
e envia como bearer token. O TUI salva só o nome da variável, não o segredo.

## Formatos Suportados
## Formatos E Reasoning

| Formato | Shape de tool-calling | Melhor uso |
| --- | --- | --- |
| `harmony` | Tool calls embutidos no texto Harmony | `gpt-oss-20b`, `gpt-oss-120b` e servidores compatíveis com Harmony |
| `openai-tools` | Campos `tools` e `tool_calls` compatíveis com OpenAI | Qwen, Llama, Ollama, LM Studio e servidores chat compatíveis |

`harness.reasoning_protocol = "crp"` vem ligado por padrão e funciona com os
dois formatos de tool-call. Ele pede respostas finais como traces CRP, enquanto
a invocação de tools continua no transporte escolhido.

Se o modelo fica chamando tools sem responder, aumente `max_tool_turns` ou peça
uma tarefa menor. Se o modelo não retorna texto nem tool call, o Cinto mostra um
evento `Empty Model Response` com o modelo e formato ativos.
Expand Down
Loading
Loading