Rank
70
AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents
Traction
No public download signal
Freshness
Updated 2d ago
Crawler Summary
KiCad file manipulation with kiutils Python library for offline parsing and modification. Use when: - Parsing/modifying .kicad_pcb (PCB boards) without running KiCad - Parsing/modifying .kicad_sch (schematics) without running KiCad - Creating/editing .kicad_mod (footprints) programmatically - Creating/editing .kicad_sym (symbol libraries) - Managing sym_lib_table / fp_lib_table (library tables) - Modifying .kicad_dru (design rules) - Editing .kicad_wks (worksheet templates) - Batch processing KiCad files without GUI - Scripted design rule checks or modifications - Automated BOM generation from schematics - Programmatic footprint/symbol library management Triggers: "kiutils", "kicad file", "kicad_pcb", "kicad_sch", "kicad_mod", "kicad_sym", "parse kicad", "offline kicad", "kicad scripting" --- name: kiutils description: | KiCad file manipulation with kiutils Python library for offline parsing and modification. Use when: - Parsing/modifying .kicad_pcb (PCB boards) without running KiCad - Parsing/modifying .kicad_sch (schematics) without running KiCad - Creating/editing .kicad_mod (footprints) programmatically - Creating/editing .kicad_sym (symbol libraries) - Managing sym_lib_table / fp_lib_table (libra Capability contract not published. No trust telemetry is available yet. Last updated 4/15/2026.
Freshness
Last checked 4/15/2026
Best For
kiutils is best for general automation workflows where OpenClaw compatibility matters.
Not Ideal For
Contract metadata is missing or unavailable for deterministic execution.
Evidence Sources Checked
editorial-content, GITHUB OPENCLEW, runtime-metrics, public facts pack
KiCad file manipulation with kiutils Python library for offline parsing and modification. Use when: - Parsing/modifying .kicad_pcb (PCB boards) without running KiCad - Parsing/modifying .kicad_sch (schematics) without running KiCad - Creating/editing .kicad_mod (footprints) programmatically - Creating/editing .kicad_sym (symbol libraries) - Managing sym_lib_table / fp_lib_table (library tables) - Modifying .kicad_dru (design rules) - Editing .kicad_wks (worksheet templates) - Batch processing KiCad files without GUI - Scripted design rule checks or modifications - Automated BOM generation from schematics - Programmatic footprint/symbol library management Triggers: "kiutils", "kicad file", "kicad_pcb", "kicad_sch", "kicad_mod", "kicad_sym", "parse kicad", "offline kicad", "kicad scripting" --- name: kiutils description: | KiCad file manipulation with kiutils Python library for offline parsing and modification. Use when: - Parsing/modifying .kicad_pcb (PCB boards) without running KiCad - Parsing/modifying .kicad_sch (schematics) without running KiCad - Creating/editing .kicad_mod (footprints) programmatically - Creating/editing .kicad_sym (symbol libraries) - Managing sym_lib_table / fp_lib_table (libra
Public facts
4
Change events
1
Artifacts
0
Freshness
Apr 15, 2026
Capability contract not published. No trust telemetry is available yet. Last updated 4/15/2026.
Trust score
Unknown
Compatibility
OpenClaw
Freshness
Apr 15, 2026
Vendor
Ten2mushi
Artifacts
0
Benchmarks
0
Last release
Unpublished
Key links, install path, and a quick operational read before the deeper crawl record.
Summary
Capability contract not published. No trust telemetry is available yet. Last updated 4/15/2026.
Setup snapshot
git clone https://github.com/ten2mushi/kiutils_skill.gitSetup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.
Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data.
Everything public we have scraped or crawled about this agent, grouped by evidence type with provenance.
Vendor
Ten2mushi
Protocol compatibility
OpenClaw
Handshake status
UNKNOWN
Crawlable docs
6 indexed pages on the official domain
Merged public release, docs, artifact, benchmark, pricing, and trust refresh events.
Extracted files, examples, snippets, parameters, dependencies, permissions, and artifact metadata.
Extracted files
0
Examples
6
Snippets
0
Languages
typescript
Parameters
bash
# Define the kiutils Python interpreter
KIUTILS_PYTHON="/path/to/kiutils"
# Run a script from your current project directory
$KIUTILS_PYTHON my_kicad_script.py
# Run inline Python (works from any directory)
$KIUTILS_PYTHON -c "from kiutils.board import Board; board = Board.from_file('project.kicad_pcb'); print(len(board.footprints))"
# Interactive shell with kiutils available
$KIUTILS_PYTHONpython
from kiutils.board import Board
# Load file
board = Board.from_file("project.kicad_pcb")
# Modify (add track, footprint, etc.)
# ...
# Save (overwrites original, or specify new path)
board.to_file()
# or: board.to_file("output.kicad_pcb")python
from kiutils.items.common import Position # Position is in millimeters, angle in degrees pos = Position(X=10.0, Y=20.0, angle=45.0)
python
# CORRECT: Find net, use its number gnd_net = next((n for n in board.nets if n.name == "GND"), None) segment.net = gnd_net.number # Use the number! # WRONG: This won't work segment.net = gnd_net # Don't assign the Net object
python
# Copper layers "F.Cu", "B.Cu", "In1.Cu", "In2.Cu" # Technical layers "F.SilkS", "B.SilkS", "F.Mask", "B.Mask", "F.Paste", "B.Paste" # Mechanical layers "Edge.Cuts", "Dwgs.User", "Cmts.User", "F.CrtYd", "B.CrtYd", "F.Fab", "B.Fab"
python
from kiutils.board import Board
board = Board.from_file("project.kicad_pcb")
# ... modifications ...
board.to_file() # Save to same file
board.to_file("modified.kicad_pcb") # Save to new fileFull documentation captured from public sources, including the complete README when available.
Docs source
GITHUB OPENCLEW
Editorial quality
ready
KiCad file manipulation with kiutils Python library for offline parsing and modification. Use when: - Parsing/modifying .kicad_pcb (PCB boards) without running KiCad - Parsing/modifying .kicad_sch (schematics) without running KiCad - Creating/editing .kicad_mod (footprints) programmatically - Creating/editing .kicad_sym (symbol libraries) - Managing sym_lib_table / fp_lib_table (library tables) - Modifying .kicad_dru (design rules) - Editing .kicad_wks (worksheet templates) - Batch processing KiCad files without GUI - Scripted design rule checks or modifications - Automated BOM generation from schematics - Programmatic footprint/symbol library management Triggers: "kiutils", "kicad file", "kicad_pcb", "kicad_sch", "kicad_mod", "kicad_sym", "parse kicad", "offline kicad", "kicad scripting" --- name: kiutils description: | KiCad file manipulation with kiutils Python library for offline parsing and modification. Use when: - Parsing/modifying .kicad_pcb (PCB boards) without running KiCad - Parsing/modifying .kicad_sch (schematics) without running KiCad - Creating/editing .kicad_mod (footprints) programmatically - Creating/editing .kicad_sym (symbol libraries) - Managing sym_lib_table / fp_lib_table (libra
name: kiutils description: | KiCad file manipulation with kiutils Python library for offline parsing and modification. Use when:
kiutils is a Python library for parsing, creating, and modifying KiCad design files without requiring a running KiCad instance. It works directly with the S-expression file formats used by KiCad 6+.
IMPORTANT: kiutils is installed in a Poetry virtual environment. Use the venv Python interpreter directly to run scripts from any project directory:
# Define the kiutils Python interpreter
KIUTILS_PYTHON="/path/to/kiutils"
# Run a script from your current project directory
$KIUTILS_PYTHON my_kicad_script.py
# Run inline Python (works from any directory)
$KIUTILS_PYTHON -c "from kiutils.board import Board; board = Board.from_file('project.kicad_pcb'); print(len(board.footprints))"
# Interactive shell with kiutils available
$KIUTILS_PYTHON
The kiutils environment is located at: /path/to/kiutils/
Note: File paths in your scripts are relative to your current working directory, not the venv location.
The universal pattern for all kiutils operations:
from kiutils.board import Board
# Load file
board = Board.from_file("project.kicad_pcb")
# Modify (add track, footprint, etc.)
# ...
# Save (overwrites original, or specify new path)
board.to_file()
# or: board.to_file("output.kicad_pcb")
This pattern applies to ALL kiutils classes:
Board.from_file() / board.to_file()Schematic.from_file() / schematic.to_file()Footprint.from_file() / footprint.to_file()SymbolLib.from_file() / symbollib.to_file()DesignRules.from_file() / designrules.to_file()FootprintTable.from_file() / fptable.to_file()SymbolTable.from_file() / symtable.to_file()WorkSheet.from_file() / worksheet.to_file()kiutils uses millimeters for all dimensions. No unit conversion needed:
from kiutils.items.common import Position
# Position is in millimeters, angle in degrees
pos = Position(X=10.0, Y=20.0, angle=45.0)
Compare to kipy (KiCad IPC) which uses nanometers:
x = 10.0 (10mm)x = 10_000_000 (10mm in nm)Critical gotcha: Track segments, vias, and pads reference nets by NUMBER, not by Net object:
# CORRECT: Find net, use its number
gnd_net = next((n for n in board.nets if n.name == "GND"), None)
segment.net = gnd_net.number # Use the number!
# WRONG: This won't work
segment.net = gnd_net # Don't assign the Net object
Layers are referenced by their string names:
# Copper layers
"F.Cu", "B.Cu", "In1.Cu", "In2.Cu"
# Technical layers
"F.SilkS", "B.SilkS", "F.Mask", "B.Mask", "F.Paste", "B.Paste"
# Mechanical layers
"Edge.Cuts", "Dwgs.User", "Cmts.User", "F.CrtYd", "B.CrtYd", "F.Fab", "B.Fab"
kiutils attempts to preserve file structure but:
| Extension | Class | Import |
|-----------|-------|--------|
| .kicad_pcb | Board | from kiutils.board import Board |
| .kicad_sch | Schematic | from kiutils.schematic import Schematic |
| .kicad_mod | Footprint | from kiutils.footprint import Footprint |
| .kicad_sym | SymbolLib | from kiutils.symbol import SymbolLib |
| .kicad_dru | DesignRules | from kiutils.dru import DesignRules |
| fp-lib-table | FootprintTable | from kiutils.libraries import FootprintTable |
| sym-lib-table | SymbolTable | from kiutils.libraries import SymbolTable |
| .kicad_wks | WorkSheet | from kiutils.wks import WorkSheet |
from kiutils.board import Board
board = Board.from_file("project.kicad_pcb")
# ... modifications ...
board.to_file() # Save to same file
board.to_file("modified.kicad_pcb") # Save to new file
# List all nets
for net in board.nets:
print(f"Net {net.number}: {net.name}")
# Find a specific net
def get_net_number(board, net_name):
"""Get net number by name (required for assigning to traces)"""
net = next((n for n in board.nets if n.name == net_name), None)
return net.number if net else None
vcc_num = get_net_number(board, "VCC")
from kiutils.items.brditems import Segment
from kiutils.items.common import Position
# Create a track segment
segment = Segment(
start=Position(X=100.0, Y=50.0),
end=Position(X=120.0, Y=50.0),
width=0.25,
layer="F.Cu",
net=gnd_num # Net NUMBER, not object
)
board.traceItems.append(segment)
from kiutils.items.brditems import Arc
arc = Arc(
start=Position(X=100.0, Y=50.0),
mid=Position(X=105.0, Y=45.0), # Midpoint of arc
end=Position(X=110.0, Y=50.0),
width=0.25,
layer="F.Cu",
net=net_num
)
board.traceItems.append(arc)
from kiutils.items.brditems import Via
via = Via(
position=Position(X=110.0, Y=50.0),
size=0.8,
drill=0.4,
layers=["F.Cu", "B.Cu"], # Through-hole via
net=net_num
)
board.traceItems.append(via)
from kiutils.items.gritems import GrLine, GrRect, GrCircle, GrText, GrArc, GrPoly
from kiutils.items.common import Position, Stroke
# Line
line = GrLine(
start=Position(X=0, Y=0),
end=Position(X=10, Y=0),
layer="Edge.Cuts",
stroke=Stroke(width=0.1)
)
board.graphicItems.append(line)
# Rectangle
rect = GrRect(
start=Position(X=0, Y=0),
end=Position(X=50, Y=30),
layer="Dwgs.User",
stroke=Stroke(width=0.15)
)
board.graphicItems.append(rect)
# Circle
circle = GrCircle(
center=Position(X=25, Y=15),
end=Position(X=30, Y=15), # Point on circumference
layer="F.SilkS",
stroke=Stroke(width=0.12)
)
board.graphicItems.append(circle)
# Text
from kiutils.items.common import Effects, Font
text = GrText(
text="LABEL",
position=Position(X=10, Y=5, angle=0),
layer="F.SilkS",
effects=Effects(font=Font(size=1.0, thickness=0.15))
)
board.graphicItems.append(text)
# Iterate footprints on board
for fp in board.footprints:
print(f"{fp.entryName} at ({fp.position.X}, {fp.position.Y})")
# Access pads
for pad in fp.pads:
print(f" Pad {pad.number}: net {pad.net}")
# Move a footprint
fp = board.footprints[0]
fp.position.X += 10.0
fp.position.Y += 5.0
# Rotate a footprint
fp.position.angle = 90.0
from kiutils.items.zones import Zone, ZoneFillSettings, ZoneKeepoutSettings
# Access existing zones
for zone in board.zones:
print(f"Zone: net={zone.netName}, layer={zone.layer}")
# Zones have polygon outlines
zone = board.zones[0]
for point in zone.polygon.coordinates:
print(f" ({point.X}, {point.Y})")
from kiutils.schematic import Schematic
sch = Schematic.from_file("project.kicad_sch")
# Iterate schematic symbols
for sym in sch.schematicSymbols:
ref = sym.property("Reference")
value = sym.property("Value")
print(f"{ref}: {value}")
# Access symbol position
for sym in sch.schematicSymbols:
pos = sym.position
print(f"Symbol at ({pos.X}, {pos.Y}), angle={pos.angle}")
Wires are Connection objects stored in graphicalItems:
from kiutils.schematic import Schematic, Connection, Junction, Position, Stroke
# Access wires (Connection objects with type='wire')
for item in sch.graphicalItems:
if isinstance(item, Connection) and item.type == 'wire':
pts = item.points # List of Position objects
print(f"Wire: {[(p.X, p.Y) for p in pts]}")
# Create a wire
wire = Connection(
type='wire',
points=[Position(X=50.8, Y=50.8), Position(X=101.6, Y=50.8)],
stroke=Stroke(width=0, type='default'),
uuid="unique-id"
)
sch.graphicalItems.append(wire)
# Access junctions
for junction in sch.junctions:
print(f"Junction at ({junction.position.X}, {junction.position.Y})")
# Create a junction
junction = Junction(
position=Position(X=76.2, Y=50.8),
diameter=0
)
sch.junctions.append(junction)
Labels are LocalLabel for local and GlobalLabel for global:
from kiutils.schematic import LocalLabel, GlobalLabel, Position, Effects
# Local labels (same sheet)
for label in sch.labels:
print(f"Label: {label.text}")
# Create local label
label = LocalLabel(
text="SIGNAL_NAME",
position=Position(X=88.9, Y=50.8, angle=0),
effects=Effects()
)
sch.labels.append(label)
# Global labels (cross-sheet)
for glabel in sch.globalLabels:
print(f"Global: {glabel.text} ({glabel.shape})")
# Create global label (shapes: input, output, bidirectional, tri_state, passive)
glabel = GlobalLabel(
text="VCC",
position=Position(X=127.0, Y=50.8, angle=0),
shape="input",
effects=Effects()
)
sch.globalLabels.append(glabel)
# Hierarchical labels
for hlabel in sch.hierarchicalLabels:
print(f"Hierarchical: {hlabel.text}")
from kiutils.schematic import NoConnect, Position
# Add no-connect marker
nc = NoConnect(
position=Position(X=50.8, Y=50.8)
)
sch.noConnects.append(nc)
# Access sheet instances
for sheet in sch.sheets:
print(f"Sheet: {sheet.sheetName}")
for pin in sheet.pins:
print(f" Pin: {pin.name}")
def generate_bom(schematic_path):
"""Generate simple BOM from schematic"""
sch = Schematic.from_file(schematic_path)
bom = []
for sym in sch.schematicSymbols:
ref = sym.property("Reference")
value = sym.property("Value")
footprint = sym.property("Footprint")
# Skip power symbols
if ref and not ref.startswith("#"):
bom.append({
"Reference": ref,
"Value": value,
"Footprint": footprint
})
return sorted(bom, key=lambda x: x["Reference"])
from kiutils.footprint import Footprint
# Load existing footprint
fp = Footprint.from_file("MyPart.kicad_mod")
# Create new footprint
fp = Footprint()
fp.entryName = "MyNewPart"
fp.layer = "F.Cu"
from kiutils.items.fpitems import Pad, DrillDefinition
from kiutils.items.common import Position
# SMD pad
smd_pad = Pad(
number="1",
type="smd",
shape="rect",
position=Position(X=-1.27, Y=0),
size=Position(X=1.5, Y=0.9), # Size uses Position class
layers=["F.Cu", "F.Paste", "F.Mask"]
)
fp.pads.append(smd_pad)
# Through-hole pad
th_pad = Pad(
number="1",
type="thru_hole",
shape="circle",
position=Position(X=0, Y=0),
size=Position(X=1.7, Y=1.7),
drill=DrillDefinition(diameter=1.0),
layers=["*.Cu", "*.Mask"]
)
fp.pads.append(th_pad)
# Pad types
"smd" # Surface mount
"thru_hole" # Through-hole
"np_thru_hole" # Non-plated through-hole
"connect" # Edge connector
# Pad shapes
"circle" # Round
"rect" # Rectangle
"oval" # Oval/oblong
"trapezoid" # Trapezoid
"roundrect" # Rounded rectangle
"custom" # Custom shape
from kiutils.items.fpitems import FpLine, FpRect, FpCircle, FpText, FpArc
from kiutils.items.common import Position, Stroke
# Silkscreen outline
line = FpLine(
start=Position(X=-2.5, Y=-1.5),
end=Position(X=2.5, Y=-1.5),
layer="F.SilkS",
stroke=Stroke(width=0.12)
)
fp.graphicItems.append(line)
# Courtyard
rect = FpRect(
start=Position(X=-3.0, Y=-2.0),
end=Position(X=3.0, Y=2.0),
layer="F.CrtYd",
stroke=Stroke(width=0.05)
)
fp.graphicItems.append(rect)
# Reference designator
ref_text = FpText(
type="reference",
text="REF**",
position=Position(X=0, Y=-2.5),
layer="F.SilkS"
)
fp.graphicItems.append(ref_text)
# Value
val_text = FpText(
type="value",
text="MyPart",
position=Position(X=0, Y=2.5),
layer="F.Fab"
)
fp.graphicItems.append(val_text)
from kiutils.items.common import Coordinate
fp.models.append({
"path": "${KICAD7_3DMODEL_DIR}/Package_SO.3dshapes/SOIC-8.wrl",
"offset": Coordinate(X=0, Y=0, Z=0),
"scale": Coordinate(X=1, Y=1, Z=1),
"rotate": Coordinate(X=0, Y=0, Z=0)
})
fp.to_file("MyNewPart.kicad_mod")
from kiutils.symbol import SymbolLib, Symbol
# Load library
lib = SymbolLib.from_file("MySymbols.kicad_sym")
# Access symbols
for sym in lib.symbols:
print(f"Symbol: {sym.entryName}")
from kiutils.symbol import Symbol, SymbolPin
from kiutils.items.syitems import SyRect, SyCircle, SyPolyline, SyText
from kiutils.items.common import Position
# Create new symbol
sym = Symbol(entryName="MySymbol")
# Add graphic body (rectangle)
body = SyRect(
start=Position(X=-5.08, Y=5.08),
end=Position(X=5.08, Y=-5.08),
strokeWidth=0.254
)
sym.graphic.append(body)
# Add pins
pin1 = SymbolPin(
electricType="input",
graphicStyle="line",
position=Position(X=-7.62, Y=2.54, angle=0),
length=2.54,
name="IN",
number="1"
)
sym.pins.append(pin1)
pin2 = SymbolPin(
electricType="output",
graphicStyle="line",
position=Position(X=7.62, Y=2.54, angle=180),
length=2.54,
name="OUT",
number="2"
)
sym.pins.append(pin2)
"input" # Input pin
"output" # Output pin
"bidirectional" # Bidirectional
"tri_state" # Tri-state
"passive" # Passive (resistors, caps)
"power_in" # Power input (VCC, GND)
"power_out" # Power output
"open_collector" # Open collector
"open_emitter" # Open emitter
"unconnected" # No connect
"free" # Unspecified
"line" # Standard line
"inverted" # With bubble (active low)
"clock" # Clock input
"inverted_clock" # Inverted clock
"input_low" # Active low input
"clock_low" # Active low clock
"output_low" # Active low output
"edge_clock_high" # Edge-triggered clock
"non_logic" # Non-logic (power, etc.)
# Add symbol to library
lib.symbols.append(sym)
# Save
lib.to_file("MySymbols.kicad_sym")
from kiutils.libraries import FootprintTable, LibraryEntry
# Load fp-lib-table
fp_table = FootprintTable.from_file("fp-lib-table")
# Add new library
new_lib = LibraryEntry(
name="MyFootprints",
type="KiCad",
uri="${KIPRJMOD}/MyFootprints.pretty",
options="",
descr="My custom footprints"
)
fp_table.libs.append(new_lib)
# Save
fp_table.to_file()
from kiutils.libraries import SymbolTable, LibraryEntry
# Load sym-lib-table
sym_table = SymbolTable.from_file("sym-lib-table")
# Add new library
new_lib = LibraryEntry(
name="MySymbols",
type="KiCad",
uri="${KIPRJMOD}/MySymbols.kicad_sym",
options="",
descr="My custom symbols"
)
sym_table.libs.append(new_lib)
sym_table.to_file()
from kiutils.dru import DesignRules
# Load design rules
dru = DesignRules.from_file("project.kicad_dru")
# Access rules
for rule in dru.rules:
print(f"Rule: {rule.name}")
for constraint in rule.constraints:
print(f" {constraint}")
# Modify and save
dru.to_file()
# WRONG - assigning Net object
segment.net = board.nets[0]
# CORRECT - assigning net number
segment.net = board.nets[0].number
# WRONG - tuple
segment.start = (10, 20)
# CORRECT - Position object
segment.start = Position(X=10, Y=20)
# Pad size uses Position(X=width, Y=height)
pad.size = Position(X=1.5, Y=0.9)
# WRONG - using layer numbers
segment.layer = 0
# CORRECT - using layer names
segment.layer = "F.Cu"
# Circle "end" is a point on the circumference, not diameter/radius
circle = GrCircle(
center=Position(X=10, Y=10),
end=Position(X=15, Y=10) # Radius = 5mm
)
# Access symbol property values
ref = symbol.property("Reference") # Returns value or None
val = symbol.property("Value")
# This searches the properties list for matching key
# Items are stored in lists - append to add
board.traceItems.append(segment)
board.graphicItems.append(line)
fp.pads.append(pad)
| Aspect | kiutils | kipy |
|--------|---------|------|
| Requires KiCad | No | Yes (running instance) |
| Connection | File I/O | IPC socket |
| Units | Millimeters | Nanometers |
| Transactions | None | Commit required |
| File types | All (.pcb, .sch, .mod, .sym) | PCB only |
| Use case | Batch processing, offline | Live manipulation |
| Install | pip install kiutils | Included in KiCad |
Load the appropriate API reference based on the task domain:
| Task Type | File Extension | Read First |
|-----------|----------------|------------|
| Schematics | .kicad_sch | api/schematics_apis.md |
| Board/PCB | .kicad_pcb | api/board_apis.md |
| Footprints | .kicad_mod | api/footprint_apis.md |
| Symbols | .kicad_sym | api/symbol_apis.md |
| Design Rules | .kicad_dru | api/dru_apis.md |
| Worksheets | .kicad_wks | api/wks_apis.md |
| Library Tables | fp_lib_table / sym_lib_table | api/libraries_apis.md |
api/schematics_apis.md)api/board_apis.md)api/footprint_apis.md)api/symbol_apis.md)api/dru_apis.md)api/wks_apis.md)api/libraries_apis.md)For detailed class-level API docs on shared item types used across boards, schematics, footprints, and symbols:
| Use Case | Read File |
|----------|-----------|
| Positioning, styling, fonts, colors | api/items/common_apis.md |
| PCB tracks, vias, arcs, stackup | api/items/brditems_apis.md |
| Board/schematic graphics (text, lines, shapes) | api/items/gritems_apis.md |
| Footprint graphics and pads | api/items/fpitems_apis.md |
| Symbol body graphics | api/items/syitems_apis.md |
| Schematic wires, junctions, labels, symbols | api/items/schitems_apis.md |
| Copper zones and keepouts | api/items/zones_apis.md |
| PCB dimension annotations | api/items/dimensions_apis.md |
Always start with the file-level API (api/board_apis.md, api/schematic_apis.md, etc.) for high-level operations. Then reference items APIs when you need detailed information about:
Machine endpoints, protocol fit, contract coverage, invocation examples, and guardrails for agent-to-agent use.
Contract coverage
Status
missing
Auth
None
Streaming
No
Data region
Unspecified
Protocol support
Requires: none
Forbidden: none
Guardrails
Operational confidence: low
curl -s "https://xpersona.co/api/v1/agents/ten2mushi-kiutils-skill/snapshot"
curl -s "https://xpersona.co/api/v1/agents/ten2mushi-kiutils-skill/contract"
curl -s "https://xpersona.co/api/v1/agents/ten2mushi-kiutils-skill/trust"
Trust and runtime signals, benchmark suites, failure patterns, and practical risk constraints.
Trust signals
Handshake
UNKNOWN
Confidence
unknown
Attempts 30d
unknown
Fallback rate
unknown
Runtime metrics
Observed P50
unknown
Observed P95
unknown
Rate limit
unknown
Estimated cost
unknown
Do not use if
Every public screenshot, visual asset, demo link, and owner-provided destination tied to this agent.
Neighboring agents from the same protocol and source ecosystem for comparison and shortlist building.
Rank
70
AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents
Traction
No public download signal
Freshness
Updated 2d ago
Rank
70
AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs
Traction
No public download signal
Freshness
Updated 5d ago
Rank
70
Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!
Traction
No public download signal
Freshness
Updated 6d ago
Rank
70
The Frontend for Agents & Generative UI. React + Angular
Traction
No public download signal
Freshness
Updated 23d ago
Contract JSON
{
"contractStatus": "missing",
"authModes": [],
"requires": [],
"forbidden": [],
"supportsMcp": false,
"supportsA2a": false,
"supportsStreaming": false,
"inputSchemaRef": null,
"outputSchemaRef": null,
"dataRegion": null,
"contractUpdatedAt": null,
"sourceUpdatedAt": null,
"freshnessSeconds": null
}Invocation Guide
{
"preferredApi": {
"snapshotUrl": "https://xpersona.co/api/v1/agents/ten2mushi-kiutils-skill/snapshot",
"contractUrl": "https://xpersona.co/api/v1/agents/ten2mushi-kiutils-skill/contract",
"trustUrl": "https://xpersona.co/api/v1/agents/ten2mushi-kiutils-skill/trust"
},
"curlExamples": [
"curl -s \"https://xpersona.co/api/v1/agents/ten2mushi-kiutils-skill/snapshot\"",
"curl -s \"https://xpersona.co/api/v1/agents/ten2mushi-kiutils-skill/contract\"",
"curl -s \"https://xpersona.co/api/v1/agents/ten2mushi-kiutils-skill/trust\""
],
"jsonRequestTemplate": {
"query": "summarize this repo",
"constraints": {
"maxLatencyMs": 2000,
"protocolPreference": [
"OPENCLEW"
]
}
},
"jsonResponseTemplate": {
"ok": true,
"result": {
"summary": "...",
"confidence": 0.9
},
"meta": {
"source": "GITHUB_OPENCLEW",
"generatedAt": "2026-04-17T01:50:16.092Z"
}
},
"retryPolicy": {
"maxAttempts": 3,
"backoffMs": [
500,
1500,
3500
],
"retryableConditions": [
"HTTP_429",
"HTTP_503",
"NETWORK_TIMEOUT"
]
}
}Trust JSON
{
"status": "unavailable",
"handshakeStatus": "UNKNOWN",
"verificationFreshnessHours": null,
"reputationScore": null,
"p95LatencyMs": null,
"successRate30d": null,
"fallbackRate": null,
"attempts30d": null,
"trustUpdatedAt": null,
"trustConfidence": "unknown",
"sourceUpdatedAt": null,
"freshnessSeconds": null
}Capability Matrix
{
"rows": [
{
"key": "OPENCLEW",
"type": "protocol",
"support": "unknown",
"confidenceSource": "profile",
"notes": "Listed on profile"
}
],
"flattenedTokens": "protocol:OPENCLEW|unknown|profile"
}Facts JSON
[
{
"factKey": "docs_crawl",
"category": "integration",
"label": "Crawlable docs",
"value": "6 indexed pages on the official domain",
"href": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
"sourceUrl": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
"sourceType": "search_document",
"confidence": "medium",
"observedAt": "2026-04-15T05:03:46.393Z",
"isPublic": true
},
{
"factKey": "vendor",
"category": "vendor",
"label": "Vendor",
"value": "Ten2mushi",
"href": "https://github.com/ten2mushi/kiutils_skill",
"sourceUrl": "https://github.com/ten2mushi/kiutils_skill",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-04-15T03:12:18.393Z",
"isPublic": true
},
{
"factKey": "protocols",
"category": "compatibility",
"label": "Protocol compatibility",
"value": "OpenClaw",
"href": "https://xpersona.co/api/v1/agents/ten2mushi-kiutils-skill/contract",
"sourceUrl": "https://xpersona.co/api/v1/agents/ten2mushi-kiutils-skill/contract",
"sourceType": "contract",
"confidence": "medium",
"observedAt": "2026-04-15T03:12:18.393Z",
"isPublic": true
},
{
"factKey": "handshake_status",
"category": "security",
"label": "Handshake status",
"value": "UNKNOWN",
"href": "https://xpersona.co/api/v1/agents/ten2mushi-kiutils-skill/trust",
"sourceUrl": "https://xpersona.co/api/v1/agents/ten2mushi-kiutils-skill/trust",
"sourceType": "trust",
"confidence": "medium",
"observedAt": null,
"isPublic": true
}
]Change Events JSON
[
{
"eventType": "docs_update",
"title": "Docs refreshed: Sign in to GitHub · GitHub",
"description": "Fresh crawlable documentation was indexed for the official domain.",
"href": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
"sourceUrl": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
"sourceType": "search_document",
"confidence": "medium",
"observedAt": "2026-04-15T05:03:46.393Z",
"isPublic": true
}
]Sponsored
Ads related to kiutils and adjacent AI workflows.