FlowJet
FlowJet is a coding agent you can run two ways:
fj— ask a question in your terminal, get an answer. No UI, no context-switching.flowjet-server— the same agent as a service: ACP over WebSocket and an OpenAI-compatible HTTP API, so any OpenAI SDK can drive it.
It runs on soothe-nano — tools, skills, MCP, subagents — with SQLite persistence, so every conversation is resumable.
Install
pip install flowjet # CLI
pip install 'flowjet[server]' # CLI + HTTP service
Requires Python 3.11+. The server is an optional extra — installing just flowjet pulls a single runtime dependency.
Configure
fj setup # guided: pick a local or hosted model
# or, with no config file at all:
export OPENAI_API_KEY=sk-...
fj summarize README.md
fj setup writes $FLOWJET_HOME/config/nano.yml (default ~/.flowjet/config/nano.yml). Without it, FlowJet falls back to OPENAI_API_KEY or ANTHROPIC_API_KEY.
Not sure your machine is ready? fj doctor (add --deep, --live-llm).
Backends
Two runtimes can build the agent; they are switched independently per surface:
| Env var | Surface | Default | Values |
|---|---|---|---|
FLOWJET_BACKEND |
CLI (fj) |
soothe |
soothe, nano |
FLOWJET_SERVER_BACKEND |
flowjet-server / fj serve |
nano |
soothe, nano |
soothe is the host runtime (extra middleware and tools over the same
soothe-nano engine). The server defaults to nano because it needs a dual-mode
agent — AGENT and ASK graphs selected per request — which soothe does not
expose yet; on soothe the server builds one host agent per mode instead.
CLI
fj explain this repo
fj -f and now add tests # continue this project's latest conversation
fjf what did we decide? # short alias of fj -f
fj -l # list recent conversations
| Flag | Meaning |
|---|---|
-f / --follow |
Continue the latest thread in this project |
-t ID / --thread |
Continue (or pin) a specific thread — overrides -f |
-l / --list |
List recent threads (newest first) |
-n NUM |
How many threads -l shows (0 = all) |
-a / --ask |
Read-only: answer without touching files |
-v / --verbose |
Mirror tool calls on stderr |
-c PATH / -w DIR |
Alternate nano.yml / workspace root |
-f is scoped to your current project, so work in other checkouts never hijacks your thread.
Enable shell completion (predicts full queries, not just flags):
eval "$(fj completion zsh)" # or: fj completion bash
Server
flowjet-server # host :: (dual-stack), port 8618
fj serve --port 8618 # same, from the CLI
from openai import OpenAI
client = OpenAI(api_key="local", base_url="http://127.0.0.1:8618/v1")
print(client.responses.create(model="default", input="Hello"))
| Endpoint | Purpose |
|---|---|
POST /v1/responses |
Create a response (stream=true → SSE) |
GET / DELETE /v1/responses/{id} |
Retrieve / cancel |
POST /v1/chat/completions |
Chat Completions (non-stream + SSE) |
GET /v1/models |
Model ids |
GET /health |
Liveness |
WS /acp |
Agent Client Protocol |
Per-request options go in extra_body.flowjet:
| Field | Values | Meaning |
|---|---|---|
session |
string | Isolates workspace + conversation thread |
interaction_mode |
agent (default) | ask |
ask is hard read-only |
projection |
report | progress | developer |
How much SSE detail to expose |
Full configuration, environment variables and the security model: docs/server.md · deployment: deploy/README.md.
Extend
Add skills and MCP servers in nano.yml:
skills:
- ~/.soothe/skills/my-reviewer
mcp_servers:
- name: filesystem
transport: stdio
command: npx
args: ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"]
Skills are SKILL.md files loaded on demand; MCP tools activate on demand by default (defer: true).
Development
git clone https://github.com/caesar0301/flowjet.git
cd flowjet
make sync-dev && make test && make lint
Upgrading from 1.x
Version 2.0 merges the former flowjet-server project into this one. The distribution is now flowjet and import paths changed. See docs/upgrade.md.
License
MIT
Metadata
Release files for flowjet 2.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| flowjet-2.1.0.tar.gz | 264.8 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| flowjet-2.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 562.9 kB
Release files / flowjet-2.1.0.tar.gz
| Download URL | flowjet-2.1.0.tar.gz |
|---|---|
| Size | 264.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
72da223f603d1d97300a2e09439dfd1afdbcc5827a4760bbb24b8bb621ae3c96
|
|
BLAKE2b-256 checksum How to use checksums |
7d213633fcdd59b58857f0ef2e5a62140f4b27ac35e7260a1641e253386bc288
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / flowjet-2.1.0-py3-none-any.whl
| Download URL | flowjet-2.1.0-py3-none-any.whl |
|---|---|
| Size | 298.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
502139b7af0b43e331cd9973f1c12040cac9ae34e03982ab3f53df1aae7255cc
|
|
BLAKE2b-256 checksum How to use checksums |
a88bc57b251c82d11c37ff1e99d9e83bbe8e8e6aecc61db9478e60f04721085f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Security for flowjet 2.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.