> Sourced from [mihai-dinculescu/tapo](https://github.com/mihai-dinculescu/tapo) โ [MIT](https://github.com/mihai-dinculescu/tapo/blob/8bfa6215805a0104de44fb36796064ad234784d7/CLAUDE.md). # CLAUDE.md This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. ## Architecture ### Workspace Members - **`tapo`** โ Core Rust library (published to crates.io) - **`tapo-py`** โ Python bindings via PyO3/maturin (published to PyPI) - **`tapo-mcp`** โ MCP server exposing Tapo devices as AI tools/resources ## Cross-Language Bindings When modifying Rust code that has Python bindings (tapo-py), always check if corresponding Python type stubs (.pyi files) need updating. The `debug` feature in `tapo` is **user-facing public API** โ `tapo-py` enables it (`features = ["python", "debug"]`), so all `debug`-gated types are also exposed to Python. Treat changes behind `cfg(feature = "debug")` as public API changes requiring changelog entries for both Rust and Python. ### Exposing Rust Types to Python - **Simple value/result types**: Annotate directly in the `tapo` crate with `#[cfg_attr(feature = "python", pyo3::prelude::pyclass(from_py_object, ...))]` and `#[cfg(feature = "python")] crate::impl_to_dict!(TypeName);`. Do NOT create a redundant wrapper struct in `tapo-py`. - **`serde_json::Value` โ Python**: Use `crate::python::serde_object_to_py_dict`. Do NOT write custom conversion functions โ pyo3's `serde` feature does not auto-implement `IntoPyObject` for `Value`. ### Python Stub Conventions - `Ext` classes in `.pyi` stubs (e.g. `ToDictExt`, `DebugExt`, `OnOffExt`) must use `typing.Protocol` since they describe capabilities of PyO3 classes without real Python-level inheritance. ## Problem Solving When a first fix attempt fails, step back and investigate the root cause before trying another surface-level fix. Explain the diagnosis before proposing the next approach. ## Git Commits Always run `/commit` when committing. It contains the project's commit conventions.
Add to your project
Paste into your project's CLAUDE.md or ~/.claude/CLAUDE.md for global rules.
More for Python
Mindx CLAUDE.md
by @DotNetAge
ไธไธชๅฏ่ชไธป่ฟๅ็ๆฐๅญๅๅ่บซ
Teamster CLAUDE.md
by @TEAMSchools
A modern data stack for K-12 education
Tree Sitter Analyzer CLAUDE.md
by @aimasteracc
A scalable, multi-language code analysis framework based on Tree-sitter, usable both as a CLI tool and an MCP server.
Claude Codex Settings CLAUDE.md
by @fcakyon
My personal Claude Code and OpenAI Codex setup with battle-tested skills, plugins, hooks and agents that I use daily.
Minimal Second Brain CLAUDE.md
by @gokhanarkan
A minimal, AI-native Obsidian vault template. 3 folders, manifest files for Claude/Copilot, automated maintenance.
Graphgrc CLAUDE.md
by @engseclabs
Build security program documentation using Git and Markdown
MCP servers for Python
microsoft/markitdown
๐๏ธ ๐ ๐ - MCP tool access to MarkItDown -- a library that converts many file formats (local or remote) to Markdown for LLM consumption.
mindsdb/mindsdb
Connect and unify data across various platforms and databases with .
FastMCP
๐ - A high-level framework for building MCP servers in Python
Get the Claude Code Starter Pack
Top CLAUDE.md rules for Next.js, TypeScript, Python, Go, and React โ free.
