Skip to main content

Hidden Moves

Describe, discover, bind, and expose typed Python capabilities. Ordinary functions and clients own their behavior; Hidden Moves supplies a small registry, schemas, per-object binding, and explicitly selected consumer interfaces.

The API and provider contract are experimental. See the plugin contract, catalog guide, and usage guide.

Installation and CLI

Python 3.11 or newer is required. Click is the core distribution's only runtime dependency. Registry, schema, and catalog modules use the standard library.

python -m pip install hidden-moves==0.1.0
hidden-moves --help
hidden-moves plugins list
hidden-moves moves list --json

The initial 0.1.0 release is experimental. The core package is published independently; the MCP, function-tool, and GitHub Projects adapters remain source installations until their separate package releases. See the release notes for the release and verification contract.

For development and the source-only example below, run uv sync --locked from a checkout.

The registry starts empty. Installing a provider advertises it; loading it is an explicit choice. Install the source-only text example to try the generic CLI:

uv pip install --python .venv/bin/python ./examples/text-plugin
uv run hidden-moves --plugin example-text moves show example.text.repeat
uv run hm --plugin example-text moves call example.text.repeat \
  --arguments '{"value": "hello", "count": 3}'

hm aliases hidden-moves. The shipped command groups are plugins list and moves list/show/call. An unconfigured CLI can inspect target-bound definitions; an application host must bind their target before structured invocation.

Ordinary functions

Your functions remain directly usable without registration:

from hidden_moves import Moves
from hidden_moves.adapters import CapabilityCatalog

def repeat(value: str, count: int = 2) -> str:
    return " ".join([value] * count)

moves = Moves()
moves.learn(repeat, namespace="text")
assert moves.text.repeat("hello", 3) == repeat("hello", 3)

catalog = CapabilityCatalog(moves, ["text.repeat"])
assert catalog.invoke("text.repeat", {"value": "hello"}) == "hello hello"

The catalog validates structured arguments before execution and serializes supported finite JSON results. Non-recursive dataclasses and TypedDicts retain typed Python behavior through supported model conversion.

Per-object binding

bind_target=True supplies the container's target as the first positional argument. Definitions can be shared while each container retains its own target:

from hidden_moves import Moves, Registry, MoveSpec

def prefix(target: str, value: str) -> str:
    return target + value

registry = Registry()
registry.register(MoveSpec("prefix", prefix, namespace="text", bind_target=True))
first = Moves("first: ", registry=registry)
second = Moves("second: ", registry=registry)
assert first.text.prefix("hello") == "first: hello"
assert second.text.prefix("hello") == "second: hello"

Existing bound client methods can be learned without additional target injection. Applications configure clients, credentials, timeouts, and resources. Inspection does not invoke capabilities or include target/context values.

Consumers and inspection

  • moves.moves() lists definitions; knows(name) checks registration.
  • resolve(name) supplies the callable; describe(name) and explain(name) inspect it.
  • Async results remain awaitable; consuming applications own their event loop.
  • Metadata is copied deeply and kept immutable; behavioral annotations are hints.
  • Discovery reads installed entry-point metadata; provider activation is explicit.

The optional MCP adapter serves a selected catalog through a local stdio host. The separate function-tool adapter exports Responses function tools and supports offline dispatch. Both use the same structured contract. Applications own authorization, transport, concurrency, and resource cleanup.

The GitHub Projects consumer provides a standalone typed read-only client and optional configured provider/host. Its fixture proof returns equivalent data through Python, catalog, actual stdio MCP, and function tools; a separate bounded live read verifies existing GitHub authorization.

The installed text provider demonstrates ordinary imports, explicit activation, and target binding. The interoperability example proves equivalent behavior through Python, CLI, MCP, and function tools.

Verification

PYTHONPATH=src .venv/bin/python -m unittest discover -s tests
uvx ruff check src tests

CI builds, inspects, and installs wheels and the example provider, checks both executables and module execution, and runs the complete behavior suites on Linux, macOS, and Windows with Python 3.11/3.13. See the compatibility policy. MCP tests include an actual stdio handshake/list/call. Network clients use synthetic fixtures and function-tool checks make no model API call.

Experimental import changes

The framework no longer ships prototype kit, notes, logs, palette, presets, or connectors namespaces, automatic built-in assembly, CommandSet, or specialized text/JSON/shell commands. Applications register their ordinary typed functions or load explicit providers instead. Historical implementations remain recoverable from Git. See migration notes.

Metadata

Release files for hidden-moves 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for hidden-moves 0.1.0
File Size Uploaded
hidden_moves-0.1.0.tar.gz 15.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for hidden-moves 0.1.0
File Interpreter ABI Platform
hidden_moves-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 38.4 kB

Release files / hidden_moves-0.1.0.tar.gz

Download URL hidden_moves-0.1.0.tar.gz
Size 15.4 kB
Tags Source
SHA-256 checksum
How to use checksums
a70442ca6c8a125c01b31fe9714249fdee674f0fdee78187a771bed437228c1e
BLAKE2b-256 checksum
How to use checksums
2f21ca0ddcf5f46fb9ddefc3152e24a950d7c96b898b6c8fae6c1302767460d3
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 Oct 10, 2026.

Transparency log

Release files / hidden_moves-0.1.0-py3-none-any.whl

Download URL hidden_moves-0.1.0-py3-none-any.whl
Size 23.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1be2c521926207f82c23bccc43bc7f1a8a912ded846c5483900d6ec14b19a645
BLAKE2b-256 checksum
How to use checksums
9bec0655c1ca8f048af5aea9a0bc079cde04663809160a067463847fa444e3fe
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 Oct 10, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page