Skip to main content

InquiryCraft

PyPI Python License: MIT

InquiryCraft is a lightweight, extensible harness for building tool-using LLM agents. It provides the execution loop and lifecycle primitives needed by standalone agents, interactive CLIs, and larger host applications without imposing a domain workflow.

Why InquiryCraft?

  • Small core — the minimal installation depends only on Click.
  • Real agent loop — provider request, tool call, tool result, and continuation are handled by a reusable AgentRuntime.
  • Provider-neutral contracts — applications can implement LLMClient or use the optional OpenAI-compatible adapter.
  • Composable tools — typed schemas, execution middleware, path policy, concurrent dispatch, output reduction, and raw artifact retention share one contract.
  • Durable runs — append-only sessions, lifecycle events, cancellation, resume, and telemetry are built in.
  • Deterministic validation — record/replay detects drift in messages, model options, tool schemas, call ordering, results, and stream mode.
  • Optional integrations — provider SDKs, token counting, and MCP stay outside the minimal package.

Install

Install the minimal runtime and CLI:

pip install inquirycraft
inquirycraft tools list

Install an OpenAI-compatible provider client:

pip install 'inquirycraft[openai]'

Other optional extras:

pip install 'inquirycraft[tokens]'
pip install 'inquirycraft[mcp]'

Importing inquirycraft resolves public symbols lazily. It does not initialize the CLI or load provider SDKs.

Quick start

Configure any OpenAI-compatible endpoint:

export INQUIRYCRAFT_API_KEY=...
export INQUIRYCRAFT_BASE_URL=http://127.0.0.1:8001/v1
export INQUIRYCRAFT_MODEL=your-model

Run a single task with the built-in file and shell tools:

mkdir -p workspace
inquirycraft run \
  --workspace ./workspace \
  "Inspect the workspace and write a concise summary to result.txt"

Start an interactive session:

inquirycraft repl --workspace ./workspace

Python API

import asyncio
import os
from pathlib import Path

from inquirycraft.llm.openai_adapter import OpenAICompatibleClient
from inquirycraft.runtime import AgentRuntime, RuntimeOptions
from inquirycraft.tools import default_tools


async def main() -> None:
    client = OpenAICompatibleClient(
        api_key=os.environ["INQUIRYCRAFT_API_KEY"],
        base_url=os.environ.get("INQUIRYCRAFT_BASE_URL"),
    )
    runtime = AgentRuntime(
        llm=client,
        options=RuntimeOptions(
            model=os.environ["INQUIRYCRAFT_MODEL"],
            workspace=Path("./workspace"),
            system_prompt="You are a careful coding agent.",
        ),
        tools=default_tools(),
    )
    try:
        print(await runtime.run("Inspect the workspace and summarize its contents."))
    finally:
        await client.aclose()


asyncio.run(main())

Implementing the LLMClient protocol is enough to connect another provider. Custom tools subclass BaseTool and return a ToolResult; hooks and event sinks can be added without modifying the loop.

Sessions, events, and replay

Persist a conversation and its lifecycle events:

inquirycraft run "continue the task" \
  --session-log .inquirycraft/session.jsonl \
  --event-log .inquirycraft/events.jsonl

Session logs are append-only. If the file already exists, run and repl restore its messages before the next turn.

RecordingLLMClient stores the exact provider-visible request and completion result or stream chunks. ReplayLLMClient consumes that JSONL offline and raises ReplayMismatchError when model parameters, messages, tool schemas, call ordering, or stream mode drift. Generated timestamps and event IDs can be normalized without loosening prompts, tool payloads, results, or ordering.

Tools and path policy

InquiryCraft includes independent read, write, edit, grep, glob, list, and shell tools. Filesystem scope is configured separately from tool behavior:

from inquirycraft.tools import PathPolicy, ReadTool

policy = PathPolicy("./workspace", enabled=True)
read = ReadTool(path_policy=policy)

A strict PathPolicy contains model-generated paths under a configured root and any explicitly allowed extra roots. Hosts that execute untrusted model output should also apply process isolation and least-privilege credentials appropriate to their threat model.

CLI reference

inquirycraft run             Run one tool-using agent task
inquirycraft repl            Start an interactive multi-turn session
inquirycraft tools list      List built-in tools
inquirycraft tools schema    Print tool schemas
inquirycraft events show     Inspect runtime event JSONL

Use inquirycraft COMMAND --help for command-specific options.

Package layout

Package Responsibility
inquirycraft.runtime Agent loop, hooks, cancellation, telemetry, and resume
inquirycraft.llm Provider protocols, streaming models, retry, and adapters
inquirycraft.tools Tool contracts, execution, file tools, and path policy
inquirycraft.memory Messages, conversations, and persistent records
inquirycraft.events Lifecycle JSONL and deterministic record/replay
inquirycraft.executor Generic shell and Python execution helpers
inquirycraft.mcp Optional MCP transport integration
inquirycraft.cli Standalone commands and CLI composition contracts

See ARCHITECTURE.md for design boundaries and validation layers.

Development

uv sync --all-extras
uv run pytest -q
uv run ruff check .
uv run ruff format --check .
uv build

InquiryCraft supports Python 3.11 and newer and is distributed under the MIT License.

Metadata

Release files for inquirycraft 0.6.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for inquirycraft 0.6.0
File Size Uploaded Provenance
inquirycraft-0.6.0.tar.gz 103.1 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for inquirycraft 0.6.0
File Interpreter ABI Platform
inquirycraft-0.6.0-py3-none-any.whl Python 3 none any Details

Total release size: 241.6 kB

Release files / inquirycraft-0.6.0.tar.gz

Download URL inquirycraft-0.6.0.tar.gz
Size 103.1 kB
Tags Source
SHA-256 checksum
How to use checksums
c1f1d4e5a8900fbe8da11af71509f89873641fc3f52adec90ae3f59737d9bb59
BLAKE2b-256 checksum
How to use checksums
0242f9b1ce4cbf64949b2d7b5239ebe7e135db0e330d9f52b4d84fd050229507
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 23, 2026.

Transparency log

Release files / inquirycraft-0.6.0-py3-none-any.whl

Download URL inquirycraft-0.6.0-py3-none-any.whl
Size 138.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
17c11894c88942d3a6b2dbcef08c27afb0e6195a2121fa0971d808cc92394bfa
BLAKE2b-256 checksum
How to use checksums
796727c9c45a1cbdec1c17cb8e176184272f02e67c6b465eff71db0623b99949
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 23, 2026.

Transparency log

Security for inquirycraft 0.6.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for inquirycraft-0.6.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 23, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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