Announcing Lightcone SDK
The Lightcone SDK is out — pip install tzafon and start automating computers with Northstar in Python or TypeScript.

The most powerful SDK for computer use. Today we're releasing the Lightcone SDK — the fastest path from idea to working computer automation, in Python or TypeScript.
pip install tzafon · npm install @tzafon/lightcone
What is Northstar?
Northstar is Tzafon's vision-language model trained specifically for computer use. You give it a screenshot and a goal. It handles the rest — what to click, what to type, when to scroll, when it's done. The model looks at the screen and acts.
The simplest thing
Point Northstar at a browser, give it a task, let it run:
from tzafon import Lightcone
client = Lightcone()
for event in client.agent.tasks.start_stream(
instruction="Go to wikipedia.org and search for Ada Lovelace",
kind="browser",
):
print(event)
Northstar opens a browser, navigates, searches, handles popups — you get a stream of events as it works.
Build your own loop
When you need control at every step, use the Responses API directly:
with client.computer.create(kind="browser") as computer:
screenshot_url = computer.get_screenshot_url(computer.screenshot())
response = client.responses.create(
model="tzafon.northstar-cua-fast",
tools=[{"type": "computer_use", "display_width": 1280, "display_height": 720, "environment": "browser"}],
input=[{
"role": "user",
"content": [
{"type": "input_text", "text": "Log in and export the monthly report"},
{"type": "input_image", "image_url": screenshot_url, "detail": "auto"},
],
}],
)
Northstar returns a computer_call — you execute the action, send back a screenshot, repeat. Full control, every step.
Multi-turn conversations
Chain requests without resending full history. Pass previous_response_id on any follow-up and the model picks up exactly where it left off:
first = client.responses.create(...)
second = client.responses.create(
previous_response_id=first.id,
input=[{"role": "user", "content": [...]}],
...
)
Every response is stored and retrievable by ID. Pass store=False to opt out of persistence for a given request.
Already on OpenAI?
Northstar is OpenAI-compatible. Change two lines:
from openai import OpenAI
client = OpenAI(
base_url="https://api.tzafon.ai/v1",
api_key="sk_...",
)
Your existing streaming, tool-calling, and structured output code works as-is.
TypeScript support
Full TypeScript support, with complete type definitions for Node.js, Bun, Deno, and Cloudflare Workers:
import Lightcone from "@tzafon/lightcone";
const client = new Lightcone();
const stream = client.agent.tasks.startStream({
instruction: "Check my inbox and summarize unread emails",
kind: "browser",
});
for await (const event of stream) {
console.log(event);
}
What's in the box
- Responses API — build your own loop, step by step
- Tasks — fully managed, fire and forget
- Chat Completions API — the interface you already know
- Computers API — direct control, no model involved
- Multi-turn chaining —
previous_response_idacross any number of turns - Persistent sessions — persistent VMs
- Python + TypeScript, fully typed
Pricing
| Model | Input | Output |
|---|---|---|
tzafon.northstar-cua-fast |
$1.00 / 1M tokens | $5.00 / 1M tokens |
Each request using the computer_use tool includes approximately 1,974 additional input tokens of fixed overhead from the injected system prompt and tool definition.
Get started
Full docs at docs.lightcone.ai. Starter templates at github.com/tzafon/lightcone.
Built something? Reach us at [email protected].
The full changelog is available at tzafon.ai/changelog.
"Visit stripe.com/pricing, vercel.com/pricing, and linear.app. Extract all plan names and monthly prices."