Metadata-Version: 2.4
Name: kneo-studio
Version: 0.9.0
Summary: Backend-for-frontend for Kneo Agent Studio, built on kneo-client
Author: Kneron, Inc. and kneo-studio contributors
License-Expression: MIT
Classifier: Development Status :: 3 - Alpha
Classifier: Framework :: FastAPI
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3.12
Classifier: Typing :: Typed
Requires-Python: >=3.12
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: kneo-client<2.0.0,>=1.2.0
Requires-Dist: fastapi>=0.115
Requires-Dist: uvicorn[standard]>=0.30
Requires-Dist: pydantic>=2.0
Requires-Dist: pyyaml>=6.0
Requires-Dist: referencing<1.0,>=0.30
Requires-Dist: packaging>=23.0
Requires-Dist: jsonschema<5.0,>=4.18
Requires-Dist: jsonschema-specifications>=2023.7
Requires-Dist: sqlalchemy<3.0,>=2.0
Requires-Dist: argon2-cffi>=23.1
Requires-Dist: pyjwt[crypto]>=2.14
Requires-Dist: httpx>=0.27
Requires-Dist: cryptography>=42.0
Provides-Extra: postgres
Requires-Dist: psycopg[binary]<4.0,>=3.1; extra == "postgres"
Provides-Extra: dev
Requires-Dist: pytest>=8.0; extra == "dev"
Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
Requires-Dist: httpx>=0.27; extra == "dev"
Requires-Dist: respx>=0.21; extra == "dev"
Requires-Dist: ruff>=0.8; extra == "dev"
Requires-Dist: mypy>=1.10; extra == "dev"
Requires-Dist: types-PyYAML>=6.0; extra == "dev"
Requires-Dist: pytest-cov>=5.0; extra == "dev"
Requires-Dist: coverage[toml]>=6.5; extra == "dev"
Requires-Dist: pytest-xdist>=3.5; extra == "dev"
Requires-Dist: pgserver>=0.1.4; extra == "dev"
Requires-Dist: psycopg[binary]<4.0,>=3.1; extra == "dev"
Dynamic: license-file

# kneo-studio

Turn an [n8n](https://n8n.io) workflow export or a [Dify](https://dify.ai) app
export into a governed [Kneo](https://github.com/kneo-agent) agent spec — and be
told, in detail, what could not be carried across.

This is the distributed package: a FastAPI backend-for-frontend that serves a
React SPA from inside the wheel. `pip install kneo-studio` gives you the whole
application, with no container and no database service to run — SQLite is
created for you.

```console
$ pip install kneo-studio
$ kneo-studio
```

It binds loopback and, by default, needs no login: your own machine is the
default deployment. The same artifact runs for a team on a shared host under a
login mode, and refuses to bind a routable address without one — an
unauthenticated shared instance would make every request the local owner, with
full rights over the project tree.

## What it is for

Studio's contract is that **it tells you what it could not convert**. An n8n
workflow or a Dify app uses constructs Kneo has no form for — output parsers,
memory, retrieval, inline secrets, branch predicates, prompt variables — and the
failure mode worth designing against is not a crash but a spec that looks
complete and quietly does something else. Every such construct becomes a **gap
card** the developer has to see. The blocking ones refuse export until they are
resolved, and the manual ones until someone acknowledges them — which is why a
clean import started by a webhook, schedule or chat trigger still asks for one
acknowledgement, for that trigger, before it hands you a file.

That is why an import can succeed and still refuse to hand you a file.

## Documentation

- [Quickstart](https://github.com/kneo-agent/kneo-studio/blob/main/docs/user/quickstart.md)
- [What imports, and what does not](https://github.com/kneo-agent/kneo-studio/blob/main/examples/README.md)
  — four n8n example workflows and the exact gaps each produces, measured rather
  than estimated; start with `chat-agent.json`, the clean one
- [Importing a Dify app](https://github.com/kneo-agent/kneo-studio/blob/main/docs/user/import_dify.md)
  — the support matrix: every app mode and node type, converted or carded
- [Changelog](https://github.com/kneo-agent/kneo-studio/blob/main/CHANGELOG.md)
- [Repository](https://github.com/kneo-agent/kneo-studio)

Studio talks to a [`kneo-serv`](https://github.com/kneo-agent/kneo-serv)
platform through [`kneo-client`](https://github.com/kneo-agent/kneo-client);
it holds no platform logic of its own.

## Licence

See [LICENSE](https://github.com/kneo-agent/kneo-studio/blob/main/LICENSE).
