Metadata-Version: 2.4
Name: cictikz
Version: 0.1.1
Summary: AI-driven TikZ circuit schematics: symbol library, renderer, linter, MCP server, xschem bridge
Author-email: Carsten Wulff <carsten@wulff.no>
License: MIT
Project-URL: Homepage, https://github.com/wulffern/cictikz
Project-URL: Documentation, https://analogicus.com/cictikz
Project-URL: Bug Tracker, https://github.com/wulffern/cictikz/issues
Keywords: tikz,circuitikz,schematic,xschem,eda,latex
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Education
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: MIT License
Classifier: Natural Language :: English
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Scientific/Engineering
Classifier: Topic :: Scientific/Engineering :: Electronic Design Automation (EDA)
Classifier: Topic :: Text Processing :: Markup :: LaTeX
Classifier: Topic :: Utilities
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: click
Requires-Dist: pyyaml
Provides-Extra: mcp
Requires-Dist: mcp[cli]; extra == "mcp"
Provides-Extra: dev
Requires-Dist: pytest; extra == "dev"
Requires-Dist: build; extra == "dev"
Requires-Dist: twine; extra == "dev"
Dynamic: license-file

# cictikz

AI-driven TikZ circuit schematics.

**Docs:** [overview](https://analogicus.com/cictikz/) ·
[CLI](https://analogicus.com/cictikz/cli) ·
[MCP server](https://analogicus.com/cictikz/mcp) ·
[dialect & converters](https://analogicus.com/cictikz/dialect) ·
[symbol gallery](https://analogicus.com/cictikz/symbols) ·
[domain libraries](https://analogicus.com/cictikz/libraries)

A standalone Python package that ships the full aic2026 TikZ macro
vocabulary as package data — `cictikz_lib` (the `ckt_lib` schematic
dialect, grid = 1.6, one transistor tall) plus the domain libraries
(`boot`, `constellation`, `dacsm`, `esd`, `gmc`, `mos`, `plane`,
`rdac`, `sc`, `sfg`, `spec`) — renders figures reproducibly with
`pdflatex`, and exposes the whole loop —
discover symbols, render, look at the result — to an AI assistant over
MCP. Later phases add a schematic IR with writers/readers for the
constrained TikZ dialect and xschem `.sch` files.

## Install

```sh
make dev-install        # pip install -e ".[mcp]"
```

Rendering needs `pdflatex` (with `standalone` + `circuitikz`) on PATH,
and `pdftoppm` (poppler) for PNG / `pdf2svg` for SVG. Without them the
package still imports; render calls fail with a clear message and the
render tests skip.

## CLI

```sh
cictikz render fig.tex --png        # compile a full standalone figure
cictikz render body.tex --wrap      # wrap a bare macro body in the packaged preamble
cictikz symbols [QUERY]             # list the symbol library
cictikz info vnmos                  # pins, entry/exit, example for one symbol
cictikz draw spec.json --fmt tikz   # schematic IR (JSON) -> TikZ or xschem
cictikz tikz2sch fig.tex            # dialect TikZ -> xschem .sch
cictikz sch2tikz circuit.sch        # any xschem .sch -> dialect TikZ
cictikz export-symlib DIR           # generate cictikz/*.sym for xschem
cictikz watch fig.tex               # live preview: recompile on save, browser follows
```

`watch` is the iteration loop: edit the file in any editor (or let an AI
edit it), and the browser shows the new render half a second later —
compile errors appear inline instead of a stale image.

The TikZ-to-xschem direction accepts only the cictikz dialect (registry
macros, moves, named coordinates, `--`/`|-`/`-|`/`to[short]` wires) and
fails loudly with a line number on anything else; xschem-to-TikZ works
on any `.sch`, drawing unrecognised symbols as labelled boxes.

## MCP

```sh
claude mcp add cictikz -- cictikz-mcp
```

Tools: `render_tikz` (source → PNG, or the parsed TeX errors),
`render_file`, `list_symbols`, `symbol_info`, `style_guide`,
`list_examples` / `get_example` (searches a figure corpus; set
`CICTIKZ_EXAMPLES` to a directory of `.tex` figures).

## Figure dialect

Figures are written against `cictikz_lib.tex` (macro names identical to
the aic2026 course repo's `ckt_lib.tex`): path-fragment macros that
compose in one `\draw`, e.g.

```latex
\draw (0,0) \vground \vresistor{$R_s$} \lvnmos{M1}{$v_i$};
\draw (M1.drain) to[short] ++(0,\grid);
```

See `cictikz style-guide` (or the MCP `style_guide` tool) for the house
rules: one line width, one arrow tip, colour only when it means
something.
