redlineai-sdk
Run your own agent inside a Redline experiment — from your repository, on your machine, against the same tasks and rubrics as the agents in the catalog.
Your agent does not move. It stays where it is, keeps its own dependencies and its own model keys, and Redline sends it work.
Install
pip install redlineai-sdk
redline init
init writes agents.py — one file, holding one TODO.
Wrap what you already wrote
from redline import agent
from myapp.agent import your_agent # ← your existing code, unchanged
@agent(id="my-agent", name="My Agent", description="Describe what it is good at.")
def run(task, ctx):
ctx.thinking("Working out what the task needs…")
return your_agent(task.prompt) # ← the one line that is yours
Then:
export REDLINE_API_KEY=rl_… # Agents page → Connect your agent
redline dev
That registers the agent with your project and holds a connection open. It now appears on the Agents page, can be selected in an experiment, and runs on your machine when one is launched.
There is no endpoint to expose and nothing deployed to us — redline dev
connects outbound and pulls its work, so it runs from a laptop behind NAT.
Telemetry you do not have to write
pip install "redlineai-sdk[otel]"
Any framework that speaks OpenTelemetry — Pydantic AI, LangChain's
instrumentation, anything on the global tracer — has its LLM and tool spans land
in the run's transcript by itself. ctx.thinking(...) is there for what the
spans do not say.
What an experiment gives your agent
An experiment can attach MCP servers, skills, CLIs and repositories. Those arrive as real tools, not as prose in the prompt:
pip install "redlineai-sdk[mcp]"
import asyncio
from redline import agent, redline_tools
@agent(id="my-agent", name="My Agent")
def run(task, ctx):
attached = asyncio.run(redline_tools(task)) # MCP tools + machine_run
return your_agent(task.prompt, tools=attached.as_openai_schema())
AttachedTools also hands them over ready-shaped: for_pydantic_ai() returns
Pydantic AI Tools, for_langchain() returns StructuredTools.
If your agent has its own tool registry — which most do past the prototype
stage — there is a framework-free pair. as_openai_schema() is what to
advertise to the model, and call() is what to do when it picks one:
attached = asyncio.run(redline_tools(task))
my_tools += attached.as_openai_schema() # advertise
result = asyncio.run(attached.call(name, arguments)) # execute
Nothing there knows anything about your framework, and it is the whole integration for a hand-rolled loop.
If your agent uses Pydantic AI or LangChain, you can skip even that. redline dev patches pydantic_ai.Agent, langgraph.prebuilt.create_react_agent and
langchain.agents.create_tool_calling_agent as they are constructed, so the
experiment's tools are already on your agent without a line of yours changing.
The machine
machine_run is there in every run — not only the ones that attached
something. Your agent runs on your laptop; this is a shell on the project's
Linux machine, in a directory of the run's own. Attach a repository and it is
already cloned there; attach nothing and you still have a computer, which is
what an agent needs the moment a task says "write a file".
attached = asyncio.run(redline_tools(task))
# → machine_run, plus a tool per attached MCP server
The machine starts when you first call the tool and never before, so a run that does not use it costs nothing.
Your repo's environment
redline dev is a second entry point into your app, and your real one almost
always loads a .env first — so this one does too, searching the root and one
level down. Shell variables always win. REDLINE_ENV_FILES=server/.env takes
exact control.
Commands
redline init |
write a starter agents.py |
redline dev |
register your agents and take work |
REDLINE_API_KEY |
runner key, rl_…, from the Agents page |
REDLINE_URL |
your Redline; defaults to http://localhost:8790 |
Where agents are found
agents.py, or every *.py in an agents/ folder. Not redline.py — a file
by that name in your working directory shadows this package on sys.path, and
the import error it produces blames the wrong thing entirely.
Names
| install | pip install redlineai-sdk |
| import | from redline import agent |
| npm | @redlineai/sdk |
The npm package is scoped and PyPI has no scopes, so @redlineai/sdk cannot
exist here — redlineai-sdk is the same name with the slash flattened. The
import stays redline, which is what you type a hundred times more often than
the install line.
pip install redline-sdk also works; it is a shim that installs this.
Docs
https://tryredlineai.co/docs/agents/your-agent
MIT.
Metadata
Release files for redlineai-sdk 0.2.7
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| redlineai_sdk-0.2.7.tar.gz | 35.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| redlineai_sdk-0.2.7-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 72.6 kB
Release files / redlineai_sdk-0.2.7.tar.gz
| Download URL | redlineai_sdk-0.2.7.tar.gz |
|---|---|
| Size | 35.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b51f7423981eb55fc99de03eda42384b3fe60f81f9f79fa04a9d85f9a8021cf0
|
|
BLAKE2b-256 checksum How to use checksums |
7642ce4480893aaed86d59dddd69d8ab0122b5348f19795a6d1ec2fb6fdcad67
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.4
|
Release files / redlineai_sdk-0.2.7-py3-none-any.whl
| Download URL | redlineai_sdk-0.2.7-py3-none-any.whl |
|---|---|
| Size | 37.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
42d6c62036377b6d269e27ac7559cb4da30e0ec5319780463c7dd8e6be8ba4f9
|
|
BLAKE2b-256 checksum How to use checksums |
2fd28150f72713b857f53a0e33095e982489525147e4e4a21af851d1ab33b5aa
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.4
|