Shimpz

Give every Action one obvious home

The required actions/ directory is the public behavior surface. Each direct Python file declares exactly one decorated async def run.

Keep authored source separate from build output

Project files text
my-assistant/
├── icon.png
├── shimpz.toml
├── actions/
│   ├── create_dns.py
│   ├── delete_dns.py
│   └── list_dns.py
├── lib/
│   └── cloudflare.py
└── pyproject.toml

icon.png, shimpz.toml, pyproject.toml, and actions/ are required. lib/ and tests/ are optional. Dockerfiles, locks, generated contracts, changelogs, and Docker ignore files are platform build output rather than Assistant source.

One file, one async run function

actions/echo.py python
from typing import TypedDict

from shimpz import action


class EchoResult(TypedDict):
    message: str


@action(description="Repeat your message back to you.")
async def run(message: str) -> EchoResult:
    return {"message": message}

The filename becomes the Action id: underscores are replaced with hyphens. The required description says in one line what the Action does for the person. Type annotations become closed input and output schemas; helper code stays in lib/.