This release is a pre-release and may not be stable for production use.
Fenolite
Headless, agent-first PCB design automation in Python. Fenolite lets an engineer — or an AI
coding agent — generate, open, verify, compare, convert and export printed-circuit-board projects
from Python code or a JSON-speaking command line, without a GUI. KiCad is the first backend (its
files, with kicad-cli as the verification oracle); a second backend for another major commercial
format family follows.
Status: pre-alpha. The repository is being bootstrapped. Nothing here is ready for real boards yet. Follow
openspec/changes/to see what is being built and in which order.
Fenolite is the Portuguese word for phenolic board material — the laminate many of us etched our first circuit boards on.
Principles
- Agent-first CLI. JSON on stdout when not attached to a terminal, a fixed envelope, typed
errors, a small exit-code vocabulary, and writes only with
--confirm(--dry-runshows the plan). - Evidence on every answer. Each result says how it was verified (see below). Nothing is claimed that was not checked.
- No silent information loss. What Fenolite does not understand in a file is preserved, and a lossy operation stops unless explicitly allowed.
- Small, exact model. Integer nanometres and microdegrees, stable ids, canonical JSON that diffs cleanly in Git.
- Stdlib-only core.
pip install fenoliteinstalls no other package; heavier features are optional extras. - Your templates, not ours. Sheet frames and title blocks are generated from your own spec; Fenolite ships no organisation's templates, rules or libraries.
The model is described in docs/design-model.md; the CLI contract in docs/cli-contract.md.
Evidence labels
| Label | Meaning |
|---|---|
KICAD-VERIFIED |
accepted by kicad-cli of the stated version, and the claim confirmed by its output |
ORACLE-VERIFIED(<tool>) |
an independent parser or tool agreed |
CORPUS-VERIFIED |
round-trip holds on public files listed in the corpus manifest |
ALTIUM-VERIFIED(kit) |
confirmed by a native-tool acceptance run with archived results |
ALTIUM-VERIFIED(author-report) |
reported by the author from ordinary use; never enough for a release claim |
INFERRED |
deduced from public documentation; a hypothesis in docs/hypotheses.md tracks it |
UNKNOWN |
bytes or fields preserved without interpretation |
UNVERIFIED |
default for anything new |
A command's overall label is the lowest label of the steps it ran.
Install (development)
git clone <this repository>
cd fenolite
uv sync --extra dev
uv run fenolite --version
make check
Talk to it like an agent does:
uv run fenolite capabilities --json --fields tools # what is installed here
uv run fenolite capabilities --text # the same, for humans
echo $? # 0 ok, 2 usage, 4 confirm, 5 findings …
Optional extras: geo (polygon booleans), kicad-ipc (live KiCad session), route (Freerouting
client), mcp (MCP server), oracles (Gerber re-parsers used in tests), dev.
Licence and provenance
Apache-2.0 (LICENSE, NOTICE). Format knowledge comes only from public sources; see LEGAL.md
for the clean-room rules and CONTRIBUTING.md for how to contribute. Every CI run and every commit
(after make hooks) passes a residue scan (tools/residue/) that blocks absolute paths, internal
identifier shapes and known non-public files; see docs/provenance.md for the provenance rules. AI agents working in this
repository: read AGENTS.md first.
Metadata
Release files for fenolite 0.0.1.dev0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| fenolite-0.0.1.dev0.tar.gz | 256.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| fenolite-0.0.1.dev0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 301.0 kB
Release files / fenolite-0.0.1.dev0.tar.gz
| Download URL | fenolite-0.0.1.dev0.tar.gz |
|---|---|
| Size | 256.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e09e70c48cc100e62172b5349e641d31e81219d35eab1fc47b639a4712077236
|
|
BLAKE2b-256 checksum How to use checksums |
5ad031a5a248fd121149d0cc8379a9c81843fe2f0228646b3c27ed18c494e509
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 30, 2026.
Transparency logRelease files / fenolite-0.0.1.dev0-py3-none-any.whl
| Download URL | fenolite-0.0.1.dev0-py3-none-any.whl |
|---|---|
| Size | 44.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4a463a2e67d8910adc0cd850f13905c1e3f865e66793c03b8bf18a36828f101c
|
|
BLAKE2b-256 checksum How to use checksums |
03996b4f96cfb989e450d3ec8f48f5c0f2f36fd56cedaa6b418e62cfdcb35eaa
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 30, 2026.
Transparency log