io-harness 0.15.0

A Rust agent harness: run an AI agent from a typed task contract to a verified result. Provider-agnostic (OpenRouter, Anthropic, OpenAI) with fallback between them, multi-file edits with grep/find over a workspace, budgets, classified provider failures with kind-aware retry and backoff, stall detection with a bounded replan, full trace, resumable runs, execution-based verification, a layered permission policy with a human-approval gate, contained sub-agent composition, an OS-native/OS-neutral sandbox (macOS sandbox-exec, Linux namespaces, portable floor; Windows wall-clock only) isolating model-produced code per run, durable checkpoint/resume for unattended runs, an MCP client (stdio and streamable HTTP), a deny-by-default network egress policy, budget-aware context assembly that compacts superseded observations and re-reads what a later write invalidated, and durable cross-run memory keyed to the workspace. Embeddable in-process.
Documentation
//! Documents — formats the agent reads and writes that are not source text.
//!
//! Every format here is optional and behind its own feature, and every one of
//! them obeys the same rule: the bytes come from and go back through
//! [`Workspace::read_bytes`](crate::tools::Workspace::read_bytes) and
//! [`write_bytes`](crate::tools::Workspace::write_bytes). No parser is handed a
//! path. That is not a style preference — a document capability that opened
//! files itself would sit outside the permission policy, and a
//! `deny_write("secrets/*")` that stops `write_file` but not `set_cell` is not a
//! policy, it is a suggestion.
//!
//! 0.14.0 ships spreadsheets ([`xlsx`]), Word ([`docx`]), PowerPoint text
//! ([`pptx`], read-only), PDF ([`pdf`]) and barcode decoding ([`barcode`]).
//! Each is behind its own feature; the `documents` umbrella turns on all five.

pub mod barcode;
pub mod docx;
pub mod pdf;
pub mod pptx;
pub mod xlsx;