A modular, agentic harness β designed as a complete toolkit for building and deploying purpose-built AI agents.
The Agent State Kit is not an agent. It is a framework for building agents.
The three agents that ship with it β ask, linux, and dev β are examples, not the destination. They demonstrate the system's capabilities, but they are not the point. The point is the harness itself: a modular, composable system where you define your own agents, states, tools, and context_providers.
- Modularity is the default. Every component β agents, states, tools, context_providers β are independently definable and swappable.
- State machines drive execution. Agents don't just "do things." They transition through states, each with different tool access, reasoning budgets, and system prompts.
- Context is dynamic. context_providers are resolved at runtime, not baked in. They can be cached, refreshed, or triggered by state changes.
- The harness is the product. The value is in the framework, not the pre-built agents. The examples are a starting point for inspiration.
On first launch, the OOBE wizard auto-detects a running Llama.cpp router at http://localhost:9931/v1. If found, it configures the connection automatically. If not, it prompts you to:
- Configure auto-start for a local llama-server (provides binary path and models directory), or
- Provide your own API connection details
API keys are encrypted using Fernet with a machine-specific key derived from the hostname.
# Agent State Kit, defaults to the "ask" demo agent.
ask "How do I use this?"
# Unlock tools with -i interactive mode, user-in-the-middle built into 'run' tool.
ask -i "Help me build a new agent"
# Asign an --agent {by-name}, or -a {name} for short.
ask -i --agent linux "Check my logs for errors."
# Approve tools using --auto with security evaluator permission gate.
ask --auto -i -a dev -c repo-status-report "Show me the git status and report changes."
ask-cli/
βββ ask.py # CLI entry point
βββ oobe.py # First-run setup wizard (OOBE)
βββ assets/
β βββ agent.py # Core Agent class (state machine + context resolution)
β βββ context.py # Runtime context, security watcher, rate limiting
β βββ registry.py # Tool registration system (@ask_tool decorator)
β βββ agents/ # Agent profiles (JSON)
β β βββ ask.json # Agent State Kit (demo agent) β default
β β βββ linux.json # Linux CLI assistant
β β βββ dev.json # Software development agent
β βββ docs/ # Documentation
β β βββ developer-guide.md
β βββ skills/ # Skill expansion
β β βββ nix-guide.md
β βββ states/ # State definitions per agent
β β βββ ask/
β β β βββ states.json
β β βββ linux/
β β β βββ states.json
β β βββ dev/
β β βββ states.json
β βββ tools/ # Tool implementations
β βββ run.py # Shell command execution (with security watcher)
β βββ read.py # File/URL reading
β βββ search.py # DuckDuckGo search (rate-limited)
β βββ gc.py # Context garbage collection
β βββ set_state.py # State transitions
βββ default.nix # Nix flake build
- Developer Guide β Detailed for building custom agents, states, and tools etc...