A sophisticated, universal agentic AI coding framework built on LangGraph and LiteLLM.
Project description
Klynx Python SDK for Agent Developmemt
klynx is a Python framework for building coding agents with a default think -> act -> feedback loop.
It supports both:
- A ready-to-use default agent runtime
- A composable graph builder API for custom orchestration
Install (PyPI)
pip install -U klynx
Optional browser tooling (needed only if your tools use browser automation):
playwright install chromium
Quick Start
1) Set your model API key
Example (OpenAI):
export OPENAI_API_KEY="sk-..."
2) Create a model and runtime via builder
from klynx import create_builder, setup_model
model = setup_model("gpt-4o")
builder = create_builder(name="quickstart").react()
agent = builder.build(
working_dir=".",
model=model,
max_iterations=20,
load_project_docs=False,
)
3) Stream a task and read the final answer
for event in agent.invoke(task="Summarize this repository architecture", thread_id="demo"):
if event.get("type") == "done":
print(event.get("answer", ""))
API Exports
from klynx import (
create_agent,
create_builder,
KlynxAgent,
KlynxGraphBuilder,
ComposableAgentRuntime,
setup_model,
list_models,
set_tavily_api,
is_tavily_configured,
run_terminal_agent_stream,
run_terminal_ask_stream,
)
Usage Tutorial
Tutorial 1: Direct Q&A mode (builder.ask preset)
from klynx import create_builder, setup_model
model = setup_model("gpt-5.3")
builder = create_builder(name="ask-demo").ask()
agent = builder.build(working_dir=".", model=model)
for event in agent.ask("Explain the key modules in this codebase", thread_id="ask-demo"):
if event.get("type") == "done":
print(event.get("answer", ""))
Tutorial 2: Build a composable runtime with create_builder
from klynx import create_builder, setup_model
model = setup_model("gpt-4o")
builder = create_builder(name="demo_builder")
builder.react()
runtime = builder.build(
working_dir=".",
model=model,
max_iterations=12,
)
for event in runtime.invoke(task="Find TODOs and propose fixes", thread_id="builder-demo"):
if event.get("type") == "done":
print(event.get("answer", ""))
Tutorial 3: Add custom nodes after the default loop
from klynx import create_builder, setup_model
model = setup_model("gpt-4o")
def post_process(runtime, payload):
return [{"type": "summary", "content": "Post-processing completed."}]
builder = create_builder(name="pipeline")
builder.react()
builder.add_node("post_process", post_process)
builder.add_edge("klynx_loop", "post_process")
runtime = builder.build(working_dir=".", model=model)
for event in runtime.invoke(task="Refactor this module", thread_id="pipeline-demo"):
print(event)
Tutorial 4: Manage toolsets dynamically
Both the default agent and builder runtime support tool mutation:
runtime.add_tools("group:core")
runtime.add_tools("group:terminal")
runtime.add_tools("group:tui")
runtime.add_tools("group:network_and_extra")
runtime.add_tools("none")
Built-in Tool Groups
Klynx has 6 built-in tool groups:
system:state_update,run_subtask,parallel_tool_callcore:read_file,apply_patch,execute_command,list_directory,search_in_filesterminal:create_terminal,run_in_terminal,read_terminal,wait_terminal_until,read_terminal_since_last,run_and_wait,exec_command,write_stdin,close_exec_session,check_syntax,launch_interactive_sessiontui:open_tui,read_tui,read_tui_diff,read_tui_region,find_text_in_tui,send_keys,send_keys_and_read,wait_tui_until,close_tui,activate_tui_modenetwork_and_extra:web_search,browser_open,browser_view,browser_act,browser_scroll,browser_screenshot,browser_console_logsskills:load_skill
Default loading behavior:
- Default agent startup loads
group:systemandgroup:core. load_skillavailability is controlled byskill_injection_mode:preloadhides it,hybridandtoolexpose it.
Tutorial 5: Permission modes (workspace / global)
agent = create_builder(name="perm").react().build(working_dir=".", model=model)
# default: workspace sandbox
print(agent.get_permission())
# global mode
agent.set_permission("global")
# back to workspace sandbox
agent.set_sandbox(True)
Tutorial 6: Enable web search tools
from klynx import set_tavily_api, is_tavily_configured
set_tavily_api("tvly-...")
print(is_tavily_configured()) # True
If Tavily API key is not configured, web_search is removed from tool groups and JSON schemas.
Tutorial 7: Skill injection modes
agent = create_builder(name="skills").react().build(
working_dir=".",
model=model,
skill_injection_mode="hybrid", # preload | tool | hybrid
)
preload: preloadSKILL.mdfrom user input hints, hideload_skill.tool: disable preload, rely onload_skill.hybrid(default): preload first, keepload_skillfallback.
Tutorial 8: Roll back to a checkpoint
You can inspect checkpoint history for a thread and select a rollback target.
Rollback is one-shot by default: the next invoke/ask resumes from the selected checkpoint.
from klynx import create_builder, setup_model
model = setup_model("gpt-4o")
agent = create_builder(name="rollback").react().build(
working_dir=".",
model=model,
load_project_docs=False,
)
thread_id = "rollback-demo"
list(agent.invoke("task A", thread_id=thread_id))
list(agent.invoke("task B", thread_id=thread_id))
history = agent.get_history(thread_id=thread_id, limit=20)
for item in history:
print(
item["display_index"],
item["checkpoint_id"][:12],
item["iteration"],
item["action"],
)
# Roll back to a selected display index (latest first).
agent.rollback(thread_id=thread_id, target_index=1)
# Optional: include tool-managed file restore.
# agent.rollback(thread_id=thread_id, target_index=1, with_files=True)
# Next run resumes from rollback checkpoint.
list(agent.invoke("task C after rollback", thread_id=thread_id))
# Optional: clear a pending rollback if needed.
agent.cancel_rollback(thread_id=thread_id)
Notes:
- Checkpoint rollback restores agent session state, not all external side effects.
with_files=Truerestores file edits recorded through mutation tools (apply_patch).- Shell commands that mutate files outside these tools are out of scope for automatic restore.
Event Model
invoke(...) and ask(...) produce event dictionaries. Common types include:
tokenreasoning_tokentool_exectool_resultwarningerrordone
A done event usually contains the final answer and token metrics.
Model Setup Notes
setup_model(...) supports both alias and provider/model usage:
setup_model("gpt-4o")
setup_model("openai", "gpt-4o")
setup_model("deepseek", "deepseek-chat")
Use list_models() to inspect available aliases.
Terminal Helpers
For terminal-only usage, you can use helper stream runners:
run_terminal_agent_stream(...)run_terminal_ask_stream(...)
Related Package
If you want a full command-line and TUI experience, install:
pip install -U klynx-cli
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file klynx-0.0.23.tar.gz.
File metadata
- Download URL: klynx-0.0.23.tar.gz
- Upload date:
- Size: 226.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3df68c3a110ec8b28df831b10b9c3a37bb54fd231297bc9679742a176b73d7f8
|
|
| MD5 |
5b0c81b11e55187b1edc932cebd82e9d
|
|
| BLAKE2b-256 |
117c9e1783c2b1c586618e9cfa7ed3f84227ab0e56a01f39f20fd397265f8bdf
|
File details
Details for the file klynx-0.0.23-py3-none-any.whl.
File metadata
- Download URL: klynx-0.0.23-py3-none-any.whl
- Upload date:
- Size: 249.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8590ec1d08fca88dcc41920d41ea563fe102be6a9f0824e4512a57f7064703c6
|
|
| MD5 |
0d883210d06ecb6823754aa464acf644
|
|
| BLAKE2b-256 |
d20168fb4836328c362fec1bd3757ab8e195e6a7d462f348e39726f83d624734
|