Portable Reasoning Controls
Inference::withReasoning() accepts a typed ReasoningSelection. Named effort
uses the shared ReasoningEffort vocabulary: minimal, low, medium,
high, xhigh, and max. Polyglot validates selections against curated
model-and-protocol capability profiles and translates accepted intent only at
the provider request boundary.
The profiles cover OpenAI Chat Completions and Responses, Anthropic, DeepSeek,
Gemini, GLM, Qwen, Cohere, Mistral, Moonshot/Kimi, xAI/Grok, and OpenRouter.
They preserve provider differences between named effort, token budgets,
enable/disable modes, adaptive reasoning, and provider defaults. Unknown model
IDs remain explicitly unknown instead of inheriting a provider-wide guess.
The default selection emits no new request field. Explicit typed reasoning
cannot be mixed with raw provider reasoning options, and lossy aliases are
rejected by default, so ambiguous requests fail before network I/O.
Tell Architecture
Tell now follows one visible domain structure:- DTOs and returned projections live under
Cognesy\Tell\Data. - Configuration services and policy values live under
Cognesy\Tell\Configuration. - Shell-job hosting lives under
Cognesy\Tell\Shelland remains an explicit, opt-in capability rather than part of the ordinary Tell host. - Workspace internals are grouped under
Workspace\Arena,Workspace\Branch,Workspace\Compaction,Workspace\Conversation,Workspace\Execution, andWorkspace\Session.
Canonical, duplicate Branch, Resource, and catch-all
workspace structures are gone. Transitional Legacy* classes and redundant
aliases were deliberately removed rather than preserving two competing mental
models.
Upgrade imports
- Replace
Cognesy\Tell\TellReasoningEffortwithCognesy\Polyglot\Inference\Reasoning\ReasoningEffort. - Import request/result/event/tool/workspace projection DTOs from
Cognesy\Tell\Data. - Import branch facades from
Cognesy\Tell\Workspace\Branch. - Import configuration policy and resolver classes from
Cognesy\Tell\Configuration. - Import shell-job hosts, policies, and exceptions from
Cognesy\Tell\Shell; import their payloads fromCognesy\Tell\Data.
Honest Execution and Human CLI
Tell now reports whether a turn was actuallydurable, transient, or
stateless. A turn outside an initialized workspace and without a named
session no longer claims that it persisted state.
Human output is now the CLI default. A bare tell "..." renders Markdown on a
terminal and plain Markdown when redirected. Scripts that previously parsed
TOON from a bare invocation must pass --output=toon. The other explicit
formats remain available.
Readable -v tracing and machine-oriented --debug progress are separate
stderr channels. Interactive human output also gains a self-erasing busy
indicator, while stdout remains reserved for the selected result format.
Complete Tool Results
Oversized textual tool output is now written to a private, content-addressed store under~/.tell/runtime/blobs/<project-hash>/ and represented in context
by a bounded continuation stub. This avoids silently discarding most of a
large result.
The blobs contain raw tool output on disk and are not pruned automatically.
Set maxSpillBytes to 0 to restore bounded head/tail truncation. The store is
created with private permissions and is never written into the project.
Package and Runtime Maintenance
- Tell can be installed and tested as an isolated Composer package, including lowest/highest dependency matrices on PHP 8.3, 8.4, and 8.5.
- Config tolerates projects without an
.envfile and now declares the supported Dotenv floor explicitly. - Shared CLI Markdown rendering lives in Utils and is reused by Hub and Tell.
- Split-package publishing excludes internal Doctools and Experimental trees from the public package release matrix.