Metadata-Version: 2.4
Name: kneo-studio
Version: 0.2.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.8
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: 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 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 uses constructs Kneo has no form for — output parsers, memory,
retrieval, inline secrets, branch predicates — 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, and the blocking ones refuse export until they are dealt with.

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)
  — three example workflows and the exact gaps each produces, measured rather
  than estimated
- [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).
