From idea to production in one command — on any stack, on any cloud.
Every new service costs the same week: scaffold, lint config, CI, versioning, deploy pipeline, IAM. Then the next one drifts from the last. Action Platform turns that week into one command and keeps every project on the same rails — without a control plane to host, a UI to learn, or a vendor to trust with your cloud.
pipx install action-platform
action-platform init web python fastapi --name "orders" --cloud aws/lambda
Thirty seconds later you have a FastAPI service with tests, lint, CI wired, a SAM template, a least-privilege IAM policy, and a GitHub repo already pushed (--no-push to keep it local).
Why teams pick it
| One command, whole lifecycle | init → release → deploy → rollback → diagnose → destroy. Same verbs for a Python API on Lambda, a Go service in Docker, a React app on Amplify. |
| Templates from production, not tutorials | Every project template is extracted from a real shipping product. Real layout, real CI, real gotchas already fixed. |
| Cloud is a layer, not a fork | Projects stay cloud-agnostic. --cloud aws/lambda overlays deploy files; swap to docker tomorrow with one command. |
| Your CI, your account, your git | Runs on GitHub Actions, GitLab CI or Jenkins you already have. Infra lands in your AWS account through OIDC — no long-lived keys, no agent, no SaaS in the loop. |
| Governance that ships with the code | Git-flow and Conventional Commits enforced by git hooks before a commit exists and by CI on every PR; changelog generated; AGENTS.md for humans and AI agents; Trivy scans; least-privilege IAM in requirements/. |
| Fix once, everywhere | CI logic lives in versioned shared repos (ci-scripts, ci-github, ci-gitlab, ci-jenkins). Bump v1, every project picks it up. |
What you get
action-platform init --list
| Type | Stacks | Ready with |
|---|---|---|
web |
python (FastAPI, FastMCP), go (Gin), node (React) | /ping, versioned API, tests, lint, CI |
library |
python, go, php, node, java, rust | packaging, version test, publish workflow |
docs |
mkdocs | Material theme, strict build in CI |
plugin |
chrome | Manifest V3, popup, background, tests, store zip |
empty |
— | platform.toml + code quality only |
| Cloud | Adds |
|---|---|
aws/lambda |
SAM template, HTTP API, custom domain, deploy workflow, IAM policy |
aws/amplify |
amplify.yml, security headers, start-job workflow, IAM policy |
docker |
Dockerfile per language, compose |
| Service | Providers |
|---|---|
postgres |
docker (local), aws-rds (Terraform/OpenTofu + SSM) |
Commands
action-platform init # interactive: type → stack → template → name → ci
action-platform init web go gin --ci gitlab # direct
action-platform init web python --cloud docker # project + deploy overlay
action-platform init ... --no-push # skip creating the remote repo
action-platform install [--dry-run] # existing repo: platform.toml, hooks, code quality, CI — never overwrites
action-platform cloud set aws/lambda # add or switch the deploy target
action-platform service add postgres --provider aws-rds
action-platform branch feature 42 login # develop (or main) → pull → feature/42-login → push
action-platform branch hotfix PROJ-7 # from main/master
action-platform gitflow # audit current branch + commits; --install-hooks
action-platform pr [--draft] [--dry-run] # PR for the current branch: target from git-flow, body from commits
action-platform release patch # bump, changelog, tag, GitHub release
action-platform deploy --stage prod
action-platform rollback
action-platform diagnose
action-platform destroy
Everything a project needs is declared in one file:
[project]
name = "orders"
type = "web"
stack = "python"
template = "fastapi"
language = "python"
[source_host]
kind = "github"
repo = "acme/orders"
[deploy]
target = "aws/lambda"
[services]
postgres = "aws-rds"
Use it from an AI client
The platform ships as an MCP server. Claude Code, Codex, Cursor — anything that speaks MCP — gets list_matrix, init_project, cloud_set, service_add, release, deploy, diagnose as tools, plus skills that make the agent preview and ask before pushing or deploying.
pip install "action-platform[mcp]"
action-platform mcp # stdio
action-platform mcp --http # http://127.0.0.1:8765/mcp
Claude Code:
/plugin marketplace add actionplatform/action-platform
/plugin install action-platform@action-platform
Any client — add to .mcp.json:
{ "mcpServers": { "action-platform": { "command": "uvx", "args": ["--from", "action-platform[mcp]", "action-platform-mcp"] } } }
Extend it
Deploy targets are plugins. Implement the DeployTarget contract — preflight, create, deploy, switch_traffic, rollback, diagnose, delete — publish it under the action_platform.deploy_target entry-point group, and action-platform deploy finds it by name.
from action_platform import ActionPlatform, Config
from action_platform.providers import SourceGithub
tool = ActionPlatform(config=Config(source_host=SourceGithub(repo="acme/orders")))
tool.release("minor")
Templates are plain cookiecutters in actionplatform/templates. Add a stack or a cloud with a pull request — the CLI reads index.toml, nothing to redeploy. Point ACTION_PLATFORM_TEMPLATES at a local checkout while you work on them.
Ecosystem
| Repo | Role |
|---|---|
| templates | projects, clouds, services |
| ci-scripts | the one implementation of setup / check / release / commit lint |
| ci-github · ci-gitlab · ci-jenkins | thin wrappers per CI |
| strategy | why it is built this way |
License
Apache 2.0.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file action_platform-0.1.0.tar.gz.
File metadata
- Download URL: action_platform-0.1.0.tar.gz
- Upload date:
- Size: 42.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c3b9e1d9318784ccdd9f6a772a2fbbf78a9b7b86bd1a10002cf1401da2a11b55
|
|
| MD5 |
857c76e4826d909a745c4f4052fadc1a
|
|
| BLAKE2b-256 |
572b51467c8f599479b3b085106adb4e9def86ae370a4154d530ac7dfafb53d0
|
Provenance
The following attestation bundles were made for action_platform-0.1.0.tar.gz:
Publisher:
python-publish-pypi.yml on actionplatform/action-platform
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
action_platform-0.1.0.tar.gz -
Subject digest:
c3b9e1d9318784ccdd9f6a772a2fbbf78a9b7b86bd1a10002cf1401da2a11b55 - Sigstore transparency entry: 2804290966
- Sigstore integration time:
-
Permalink:
actionplatform/action-platform@d31bcbacf1536da2d93f20b2c54cce7d7638cc05 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/actionplatform
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish-pypi.yml@d31bcbacf1536da2d93f20b2c54cce7d7638cc05 -
Trigger Event:
release
-
Statement type:
File details
Details for the file action_platform-0.1.0-py3-none-any.whl.
File metadata
- Download URL: action_platform-0.1.0-py3-none-any.whl
- Upload date:
- Size: 60.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dcef10387c7197ca77fd5ca8ef725e02ca2986c2874b81a7b84974807960e990
|
|
| MD5 |
fc9107f2cbeabaa63922f02bf7a4c0e3
|
|
| BLAKE2b-256 |
9b874f3229058d4f8d0d458e1f97800a18a75df4b1fa4a91be10db6d8a6dabe4
|
Provenance
The following attestation bundles were made for action_platform-0.1.0-py3-none-any.whl:
Publisher:
python-publish-pypi.yml on actionplatform/action-platform
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
action_platform-0.1.0-py3-none-any.whl -
Subject digest:
dcef10387c7197ca77fd5ca8ef725e02ca2986c2874b81a7b84974807960e990 - Sigstore transparency entry: 2804291033
- Sigstore integration time:
-
Permalink:
actionplatform/action-platform@d31bcbacf1536da2d93f20b2c54cce7d7638cc05 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/actionplatform
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish-pypi.yml@d31bcbacf1536da2d93f20b2c54cce7d7638cc05 -
Trigger Event:
release
-
Statement type: