Skip to main content

Agentik — a CLI-first, modular agent framework that runs LLMs via OpenRouter.

Project description

Agentik Framework

Agentik is a CLI‑first, modular agent framework that runs LLMs via OpenRouter. It focuses on developer ergonomics: clean configs, a batteries‑included CLI, safe tool execution, rich transcripts with run metadata, and a dev profile with auto‑rerun watching for fast iteration.


Highlights

  • CLI‑first workflow: agentik run, agentik dev watch, agentik tools ...

  • OpenRouter integration: one key → many models

  • Agent loop: plan → (optional tool) → reflect → finalize

  • Pluggable tooling (via entry points) with built‑ins:

    • http_fetch — GET with caching + limits
    • html_to_text — HTML → text
    • write_file — safe file writer
  • Policies enforced per tool call: allow_network, allow_filesystem

  • Transcripts: JSONL with meta_start/meta_end (tokens, cost estimate, timings, tags)

  • Run profiles: fast, thorough, deterministic, creative, cheap, dev

  • Dev watcher: polling file watcher, auto‑rerun on save (no extra deps)

  • Memory: file‑backed minimal memory (json or in‑memory dict)


Installation

pip install agentik-framework

# for local development
pip install -e .[dev]

OpenRouter API key

Set your key once (recommended):

PowerShell (Windows):

setx OPENROUTER_API_KEY "sk-or-..."
# then restart your shell

Or via Agentik RC:

agentik keys set openrouter sk-or-... --global

Verify your setup:

agentik self-test

Quick Start

Initialize a project:

agentik init . --template basic --name "My Agent Project"

Scaffold an agent:

agentik new agent research \
  --template basic \
  --tools http_fetch,html_to_text,write_file \
  --with-tests

Create a minimal config (save as configs/agent.yaml):

agent:
  name: research
  goal: "Research and summarize web sources"
  loop:
    max_steps: 4
    reflect: true

llm:
  model: openai/gpt-4o-mini
  temperature: 0.2

memory:
  type: json
  path: ./memory/agent.json

policies:
  allow_network: true
  allow_filesystem: true

tools:
  - http_fetch
  - html_to_text
  - write_file

Run it:

agentik run .\configs\agent.yaml -p "Summarize the latest about OpenRouter rate limits"

CLI Reference

agentik version

Print the current version.

agentik self-test

Environment sanity checks (Python, OS, OpenRouter key, RC path).

agentik init

Initialize a project folder.

agentik init [PATH] --template basic --force --name "Project Name"

agentik run

Run an agent loop with profiles and run metadata.

agentik run CONFIG \
  -p "Prompt text" \
  --model TEXT \
  --temperature FLOAT \
  --stream \
  --dry-run \
  --save-transcript PATH \
  --profile [fast|thorough|deterministic|creative|cheap|dev|none] \
  --tag TAG \
  --note TEXT \
  --run-id TEXT \
  --obs-max-chars INT

Keys

agentik keys set openrouter sk-or-... [--global|--local]
agentik keys show

Models

agentik models list [--filter TEXT] [--refresh]

New (scaffolding)

agentik new agent NAME \
  --template basic \
  --tools "t1,t2" \
  --memory json \
  --memory-path ./memory/agent.json \
  --to . \
  --with-tests \
  --force

agentik new tool NAME \
  --template python \
  --to . \
  --with-tests \
  --force

Templates

agentik template list
agentik template apply kind/name --to . --force --name MyArtifact
agentik template pull <git-or-zip-url> --to .

Tools

agentik tools list
agentik tools info NAME
agentik tools run NAME --arg key=value --arg key2=value2 [--json]

Validate

agentik validate file CONFIG.yaml \
  --show-effective \
  --model TEXT \
  --temperature FLOAT \
  --max-steps INT

Batch

Process prompts from CSV or JSONL.

agentik batch run FILE \
  --column prompt \
  --out results.jsonl \
  --model TEXT \
  --temperature FLOAT

Memory

agentik memory init --type json --path ./memory/agentik.json
agentik memory recall --n 10 [--config CONFIG.yaml]
agentik memory summarize --n 20 --max-chars 1200 [--config CONFIG.yaml]
agentik memory clear [--config CONFIG.yaml]
agentik memory path [--config CONFIG.yaml]

Eval

Tiny harness to check expected substrings/regex.

agentik eval run FILE.jsonl --config CONFIG.yaml --out eval_results.jsonl

Dev Watch (auto‑rerun)

Watches files and re‑runs on change — great during development.

agentik dev watch CONFIG \
  -p "Prompt text" \
  --prompt-file PATH \
  --path PATH \            # repeatable (default .)
  --include GLOB \         # repeatable (default python/yaml/md/templates/tools)
  --exclude GLOB \         # repeatable
  --interval 0.6 \
  --debounce 0.5 \
  --clear/--no-clear \
  --stream/--no-stream \
  --profile dev \
  --save-transcripts DIR \
  --obs-max-chars 800 \
  --no-initial-run \
  --tag TAG \              # repeatable (default "dev")
  --note TEXT

Example (PowerShell):

agentik dev watch .\configs\agent.yaml `
  --prompt-file .\prompt.txt `
  --path . `
  --include **/*.py --include **/*.yaml --include templates/** `
  --exclude .venv/** --exclude runs/** `
  --save-transcripts .\runs `
  --stream

Tools & Policies

Built‑in tools (selected):

  • http_fetch(url, ttl, timeout, max_bytes, headers, allow_network) Returns {ok, data, error, meta} with data.text, data.status, and cache hints.

  • html_to_text(html, keep_newlines, drop_links, max_chars) Lightweight HTML → text (dependency‑free).

  • write_file(path, content, encoding, overwrite, allow_abs, allow_filesystem) Safe writer with sandboxing and system‑path guards.

Policies (YAML):

policies:
  allow_network: true
  allow_filesystem: false

If a tool requires a disabled capability, Agentik blocks it and records an observation.


Transcripts & Cost

Each run can append JSONL records via --save-transcript. Files include:

  • meta_start: run id, profile, tags, agent, model, policies, memory path
  • Tool calls and assistant responses
  • meta_end: timings (planner/tools/reflect), tokens (prompt/completion/total), estimated cost

Cost is derived from OpenRouter pricing when available. You can override with env vars:

# USD per 1K tokens
$env:AGENTIK_PRICE_PROMPT_PER_1K = "0.50"
$env:AGENTIK_PRICE_COMPLETION_PER_1K = "1.50"

Configuration Reference (YAML)

agent:
  name: my-agent
  goal: "Help with tasks."
  loop:
    max_steps: 4
    reflect: true

llm:
  model: openai/gpt-4o-mini
  temperature: 0.2

memory:
  type: json         # json | dict
  path: ./memory/agent.json

policies:
  allow_network: true
  allow_filesystem: false

tools:
  - http_fetch
  - html_to_text

Development

  • Lint/format: ruff check . and black .
  • Tests: pytest -q
  • Build: python -m build
  • Publish: twine upload dist/*

Authors

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

agentik_framework-0.1.5.tar.gz (36.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

agentik_framework-0.1.5-py3-none-any.whl (41.3 kB view details)

Uploaded Python 3

File details

Details for the file agentik_framework-0.1.5.tar.gz.

File metadata

  • Download URL: agentik_framework-0.1.5.tar.gz
  • Upload date:
  • Size: 36.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.6

File hashes

Hashes for agentik_framework-0.1.5.tar.gz
Algorithm Hash digest
SHA256 de282a04fb1d6826bb42201efaa38af1c2e7ccd4423d5ba18d42ef5fc9f7e8e2
MD5 d7942a7aca02b6d06cbcaa27291a6ac0
BLAKE2b-256 4a01b5c4085b19a75e4eaf100572814959c1ec40ac09bbaff10eab8074c5249f

See more details on using hashes here.

File details

Details for the file agentik_framework-0.1.5-py3-none-any.whl.

File metadata

File hashes

Hashes for agentik_framework-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 62e673366cc8af8de0ecaa731002f331a2ac0f0dbd85bcc1a82b63e59d69eae2
MD5 768ba1e48cc3aa027a309fbc8950693a
BLAKE2b-256 abe28e1e17c7aaf453355fc857f459612e5ba97b161d2e3e1ad3e4e375545a45

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page