Skip to main content

Functualize — From functions to action.

From functions to action.

Python operations and verifiable workflows for humans, automation, and AI agents.

Docs · Quick Start · Agents · Install

CI Docs Python Versions PyPI version License: Apache 2.0 Status: Alpha

What is Functualize?

Functualize turns ordinary Python functions into discoverable, configurable, composable operations and verifiable workflows.

Use the same underlying jobs from the TUI, CLI, Python, MCP, HTTP, Lambda, CI, an AI agent, or another workflow.

function → job → workflow → evaluation → outcome

The CLI is only one surface. The underlying operation stays the same.

Quick Start

Drop a function into your workspace:

# deploy.py
from functualize.job import RunContext


def deploy(environment: str = "staging", rc: RunContext | None = None) -> None:
    if rc:
        rc.log(f"Deploying to {environment}...")

From that directory:

func

func discovers the workspace and opens the interactive TUI, where you can find jobs, inspect/configure parameters, see where values come from, and run them.

Or invoke directly:

func deploy --environment production

No command-registration boilerplate is required.

Why Functualize?

A useful function is easy to write. Making it operational usually adds:

  • discovery and invocation
  • typed configuration
  • secret and credential provisioning
  • local and remote config / secret sources
  • dependency injection
  • structured logging and execution context
  • state and resumability
  • workflows and conditional execution
  • human or AI gates
  • verification and completion criteria
  • multiple delivery surfaces

Functualize provides that layer while keeping domain logic as ordinary Python.

Workspace-native operations

Functualize can attach an operational layer to an existing repository without taking over its application structure.

workspace/
├── src/
├── docs/
├── AGENTS.md
└── .functualize/
    ├── jobs/
    ├── lib/
    └── plugins/

This works whether the repository itself is Python, Go, Rust, Terraform, research code, or a mixed agent workspace.

Functualize can combine workspace-local jobs with user-global jobs under ~/.config/functualize/jobs/, following the XDG configuration convention. Additional job directories can also be configured explicitly.

Built for the agent workspace

An emerging pattern in agent systems is to treat the workspace itself as a first-class interface: files hold context and artifacts, directories provide structure, and agents use the filesystem and shell to understand and act on their environment.

You can see this direction in ICMP / Model Workspace Protocol, OpenClaw, Hermes Agent, and Vercel's filesystem-first agent work.

Functualize makes the executable side of that pattern straightforward: keep context and artifacts in the workspace, put reusable operations under .functualize/, and let humans or agents discover and invoke them from the same place.

The workspace provides context. Functualize gives it executable, composable operations.

Agents and workflows

Functualize complements agents rather than replacing them.

Keep your agent. Give it reliable workflows.

The agent supplies reasoning. Functualize supplies the procedure, state, gates, allowed transitions, deterministic checks, and completion criteria.

Agent / harness
      │
      ▼
Functualize workflow
      │
      ├── deterministic step
      ├── agent step
      ├── verification gate
      ├── correction
      └── evaluator
      │
      ▼
verified outcome

Drive a workflow over CLI

Start the workflow like any other job:

func release

If it blocks on a gate in non-interactive mode, Functualize persists the scope. Inspect, answer, and resume the same workflow:

func builtin workflow list
func builtin workflow show <workflow-id>
func builtin workflow answer <workflow-id> <gate> --input '{"approved": true}'
func builtin workflow resume <workflow-id>

Or answer and advance in one command:

func builtin workflow resume <workflow-id> --input '{"approved": true}'

Completed steps are not re-run; recorded branches and gate inputs remain stable when the workflow resumes.

Or drive the same workflow over MCP

Expose the workspace:

func mcp serve

An agent can discover and start a workflow through the normal MCP job tools:

discover_jobs()
get_job_schema("release")
run_job("release")

If it blocks:

list_workflows()
get_workflow_state("<workflow-id>")

The agent can inspect the pending gate, use tools offered by that gate, provide input, and advance the same workflow:

call_gate_tool("<workflow-id>", "inspect_artifact", {...})
answer_gate({...}, workflow_id="<workflow-id>", gate="review")
resume_workflow("<workflow-id>")

Or provide the gate input directly while resuming:

resume_workflow(
    "<workflow-id>",
    input={"approved": true, "reason": "checks passed"}
)

The distinction is simple:

answer_gate(...)      records gate input
resume_workflow(...)  advances the workflow

This gives agents a stable loop:

discover → start → inspect → act → resume → verify → complete

without requiring a specific agent framework or model.

Bring your own agent. Bring your own model. Bring your own harness. Standardize the workflow.

What you get

  • Discovery — CWD, .functualize/, explicit directories, and user-global jobs
  • Configuration — typed config, layering, remote sources, secrets
  • Execution — RunContext, DI, lifecycle, stable exit semantics
  • Workflows — DAGs, gates, state, resume, AgentStep, evaluation
  • Agents — MCP tools, AI gates, agent-backed steps, verifiable execution
  • Surfaces — TUI, CLI, Python, MCP, HTTP, Lambda
  • Extensibility — plugins, providers, adapters, domain SDKs

Installation

Standalone — no system Python required

curl -LsSf \
  https://raw.githubusercontent.com/raicing-ai/functualize/master/install.sh \
  | sh

Windows:

irm https://raw.githubusercontent.com/raicing-ai/functualize/master/install.ps1 | iex

The standalone distribution includes its own Python runtime and first-party Functualize components.

Then simply run:

func

With Python

uv tool install "functualize[cli]"

or:

pipx install "functualize[cli]"

As a library

uv add functualize

Use FunctualizeApp when you want to build your own named CLI/application on top of the runtime, with explicit job sources, configuration, plugins, and delivery adapters.

from functualize.app import FunctualizeApp, JobSources, classic

app = FunctualizeApp(
    name="my-ops",
    job_sources=JobSources(directories=["my_ops.jobs"]),
    config_sources=classic(),
)


def run() -> None:
    app.run()

Extend Functualize

Functualize supports packaged plugins through Python entry points, and a workspace can keep project-local extensions under .functualize/plugins/ so shared behavior can live with the repository and augment operations contributed by multiple job authors.

Plugins can add lifecycle hooks, CLI commands, dynamic jobs, providers, adapters, and other integrations without changing Functualize core.

Core concepts

Concept Meaning
Function Ordinary Python domain logic
Job A discoverable, configurable executable function
Workflow Jobs and agent steps composed into a bounded procedure
Evaluation Gates, checks, tests, and postconditions
Operation Useful work that can be invoked and executed reliably
Delivery surface TUI, CLI, Python, MCP, HTTP, Lambda, or another adapter

Documentation

Project status

Functualize is currently alpha and actively evolving around workflows, agent interoperability, evaluation, secrets/configuration, and adapters.

Contributing

See Contributing.

License

Apache 2.0 © 2025-2026 Mohammad Hakim Adiprasetya

Release files for functualize 0.4.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 functualize 0.4.0
File Size Uploaded
functualize-0.4.0.tar.gz 1.2 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for functualize 0.4.0
File Interpreter ABI Platform
functualize-0.4.0-py3-none-any.whl Python 3 none any Details

Total release size: 2.7 MB

Release files / functualize-0.4.0.tar.gz

Download URL functualize-0.4.0.tar.gz
Size 1.2 MB
Tags Source
SHA-256 checksum
How to use checksums
53aa13fce92c83b376494fb09e9ce7275b5de650ca46b0f2dfde787f85c0d78b
BLAKE2b-256 checksum
How to use checksums
55a3798e7d9ca1a8a6b16955ab0a6736757103088178df3ad5915433ba4774d9
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 Sep 25, 2026.

Transparency log

Release files / functualize-0.4.0-py3-none-any.whl

Download URL functualize-0.4.0-py3-none-any.whl
Size 1.4 MB
Tags Python 3
SHA-256 checksum
How to use checksums
610f13fbfeb3018a0f12c82ed7df4b2e71a645601548d2ad3caaaf6f7ce61f68
BLAKE2b-256 checksum
How to use checksums
d7928f1f82a61d885e3dd38762ab386228ac1b775192e71e214acc340aa49196
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 Sep 25, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.4.0 This release

2 release files

0.3.0

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

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