Own your agent as a neutral folder; audit its portability, compile it to provider formats (Anthropic YAML / AWS Bedrock AgentCore / Google ADK), and deploy it live (Anthropic, AWS Bedrock AgentCore Harness, Google Agent Engine). Own the definition, rent the runtime.
Project description
agentlift
Agent runtimes all want your agent in a different shape. agentlift lets you define it
once as a neutral .managed-agents/ folder — system prompt, skills, MCP servers, tool
allowlist, subagents — then audit, export, or deploy it to Anthropic Managed
Agents, AWS Bedrock AgentCore, Google Agent Engine, or OpenAI Agents SDK.
Own the definition. Rent the runtime.
It's the folder you already use with Claude Code / the Agent SDK (CLAUDE.md/agent.md +
skills/ + .mcp.json + a roster). Nothing new to learn — the thing you have is the input,
and it stays yours, not a vendor's.
pip install agentlift
agentlift audit ./my-agent # how portable is it, per provider? (offline)
agentlift deploy ./my-agent # → Anthropic Managed Agents (reference target)
agentlift deploy ./my-agent --target bedrock # → AWS Bedrock AgentCore (Claude-native)
agentlift deploy ./my-agent --target google # → Google Vertex AI Agent Engine (preview)
agentlift export openai-agents ./my-agent # → an OpenAI Agents SDK script (self-host)
agentliftnot found after install? Run it module-style —python -m agentlift.cli <cmd>(the launcher just landed offPATH; add it if you prefer the short form).
Why this exists
Adopt a provider's native tooling — Anthropic YAML, a Bedrock Strands container, Google ADK Python, an OpenAI graph — and your agents are now shaped by that provider. The day you want a different runtime, you re-author everything. agentlift makes the deploy unit the same folder you develop against, keeps it provider-neutral, and treats each runtime as a back-end of one compiler. One definition, many backends, no lock-in.
See it happen (a skill that runs in the cloud)
The believable bit isn't "we generated config" — it's that an uploaded skill actually fires
inside the hosted runtime. plan is a deterministic, no-network dry run; deploy pushes it;
run proves the skill rode along:
$ agentlift plan ./examples/quickstart
Skills to upload: 1
- receipt-stamp (035823c8, 1 file) used by: knowledge-agent
Agents to create: 1
- knowledge-agent [claude-haiku-4-5] tools: read/glob/grep skills: @skill:035823c8
Deployable: yes
$ agentlift deploy ./examples/quickstart -y
skill 'receipt-stamp': uploaded skill_01Ph… agent 'knowledge-agent': created agent_019L…
Lockfile written: ./examples/quickstart/.agentlift-lock.json
$ agentlift run knowledge-agent --project ./examples/quickstart --task "What is a North Star metric?"
A North Star metric is the single measure that best captures the value users get…
RECEIPT: metric captured ← the uploaded SKILL.md firing inside the hosted runtime
latency 5.9s | in 4121 out 220 | ~$0.0044
The plan is a pure function of the folder (same input → same plan): it's the dry-run, the diff, and what the offline tests assert against.
The folder is the agent
agentlift reads a convention you may already use. A minimal single agent:
my-agent/.managed-agents/knowledge-agent/
├── agent.md # YAML frontmatter + system prompt
├── skills/receipt-stamp/SKILL.md # uploaded as a managed skill
└── knowledge/pm-basics.md # folded into the system prompt
---
name: knowledge-agent
model: claude-haiku-4-5
tools: [read, glob, grep] # built-in allowlist (omit = all)
---
You are the Knowledge Agent. Answer product questions concisely.
…and the same convention scales to a multi-agent system — a coordinator, workers, shared and private skills/MCP servers, all wired by frontmatter:
.managed-agents/
├── shared/skills/cite-sources/SKILL.md # shared skill — uploaded once, used by many
├── shared/mcp.json # shared MCP — one server, many agents
├── lead/agent.md # subagents: [bug-finder, researcher] → coordinator
├── bug-finder/ (agent.md + skills/bug-report/) # private skill
└── researcher/ (agent.md + mcp.json) # private MCP
A bare ref (search) resolves to the agent's own resource first, then shared/. Your local
.claude/agents/ are never swept in. Full spec: docs/convention.md.
How it works
parse → plan → apply → run — and only apply/run touch the network.
- parse — read the folder into an in-memory project (pure file IO).
- plan — a deterministic list of API ops with symbolic refs, skill dedup, validation, and diagnostics. No network. This is the dry-run and the test contract.
- apply — upload skills (deduped), create agents in order, write
.agentlift-lock.json(local definition → remote IDs) so re-deploys are idempotent. Commit it. - run — invoke a deployed agent by ID, or run the same folder locally with
--local.
Diagnostics surface anything a runtime can't represent — never a silent drop. Internals: docs/how-it-works.md.
Provider snapshot
One folder, four managed-agent runtimes — at different maturity tiers. agentlift audit
rates portability per provider before you deploy; the table below is what agentlift ships
today:
| Runtime | Deploy status | Model | Notes |
|---|---|---|---|
| Anthropic Managed Agents | ✅ Live — reference target, fullest mapping | Claude (native) | skills · MCP · :ask · coordinator |
| AWS Bedrock AgentCore | ✅ Live — single-agent deploy via the managed Harness (agent · skills · MCP · sandbox · browser, 6/6 live-verified); the AWS Harness feature is in public preview | Claude (native, no remap) | multi-agent → build-only Runtime container (deploy-bedrock.md) |
| Google Vertex AI Agent Engine | 🟡 Live (preview) | Claude → Gemini | skills · MCP · web tools; deploy-google.md |
| OpenAI Agents SDK | 📦 Export / self-host | gpt-* |
as_tool composition; no hosted-deploy path |
Each runtime captures the agent differently (Anthropic YAML, a Strands/AgentCore container, ADK Python, an Agents SDK script) — the full cell-by-cell map is docs/provider-matrix.md. Read the tier before assuming parity: Google is preview, and the AWS Harness is single-agent — a multi-agent team (subagents + per-agent skill/MCP scoping) compiles to the build-only Runtime container instead.
Proof, not assertion
agentlift's claims are pinned by tests and committed live receipts, not prose:
-
Live coverage matrix — one neutral fixture deployed + queried on Anthropic and Google, with all six portability dimensions (agents · subagents · shared/individual MCP · shared/individual skill) EXERCISED server-side (committed receipts under
tests/live/receipts/). -
AWS Bedrock Harness — live-verified, 6/6 (single agent): a committed Nova receipt shows
CreateHarness → READYthenInvokeHarnessexercising agent + base-session sandbox + remote MCP + S3-loaded skill +agentcore_browser— agentlift's full single-agent deploy, end to end. (The AgentCore Harness feature is in AWS public preview; Claude inference runs but is Gate-A-gated, so the wire-shape receipt is on Nova.) Evidence: docs/tested-platforms.md. -
Managed vs local benchmark (benchmarks/results.md,
claude-haiku-4-5):Arm Pass rate Median latency Avg cost managed (cloud) 100% on N=5 runs 5.9s $0.0052 local (your machine) 100% on N=5 runs 2.3s $0.0034 Pass = the uploaded skill fired and the answer was on-topic. Same folder, two runtimes, identical behavior.
pytest -m "not live" # deterministic translation + idempotency — no API key, runs in CI
pytest -m live # deploy to the real API, run, LLM-grade (needs credentials)
What you get, briefly
- Isolation by construction — a deployed agent gets only its own folder (+
shared/); the repo-rootCLAUDE.md, a sibling's skills, and your machine's MCP servers can't leak in. Pinned bytests/test_isolation.py. - Permissions that deploy — append
:askto any tool (bash:ask,create_issue:ask) and the hosted agent pauses for caller approval — the deployable form of a hook. - Deploy how you work — a command (
deploy --yes), a git-push workflow, or from inside Claude Code. Idempotent via the lockfile. - A full CLI —
validate·plan·audit·export·diff·deploy·run·list·destroy·bench. See docs/deploying.md.
Documentation
| Doc | What's in it |
|---|---|
| docs/convention.md | The .managed-agents/ folder spec — frontmatter, skills, MCP, :ask, subagents |
| docs/how-it-works.md | parse → plan → apply → run, determinism, idempotency, the lockfile |
| docs/deploying.md | The three deploy paths, commands, the lockfile, install/PATH |
| docs/provider-matrix.md | Cell-by-cell capability matrix across all four runtimes |
| docs/anthropic-mapping.md | Exact local → Managed Agents field mapping |
| docs/deploy-bedrock.md · deploy-google.md | Per-provider credentials, gates, and caveats |
| docs/tested-platforms.md | Per-platform live receipts + reproduce steps |
| docs/limitations.md | Honest constraints (stdio MCP, MCP auth, knowledge inlining) |
Examples: quickstart/ (one agent) ·
team/ (coordinator + roster, shared skill, MCP, bash:ask) ·
in-a-project/ (embedded in a real repo, proves isolation) ·
deploy-workflow/ · claude-code-skill/.
Limitations
Each is surfaced as a agentlift plan diagnostic, never a silent surprise — full list in
docs/limitations.md:
- Remote MCP only — local
stdioservers (npx …) can't be deployed; host behind HTTPS. - No inline MCP auth on Anthropic (Bedrock + Google carry it via runtime env vars).
- Knowledge files are inlined into the system prompt (no persistent FS in the sandbox).
- Maturity varies — Anthropic is live/full; the AWS Harness is a live single-agent deploy (the AgentCore feature is in AWS preview; multi-agent → build-only Runtime); Google is live preview; OpenAI is export-only.
Roadmap
Current focus: turn the AWS Bedrock Runtime --build-only artifact into a full hosted
deploy (Gate B: IAM + ECR + role), and a self-hostable openai-chatkit export. Per-provider
gaps and status live in their deploy docs and docs/provider-matrix.md.
License
MIT — see LICENSE.
Project details
Release history Release notifications | RSS feed
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 agentlift-0.6.0.tar.gz.
File metadata
- Download URL: agentlift-0.6.0.tar.gz
- Upload date:
- Size: 142.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
38a4a3ed4710e7b761905d0e8513a48dead83f492b9a066805f1de1584d0b404
|
|
| MD5 |
4ceb7537702deb3b32c1d7ee8ad186b5
|
|
| BLAKE2b-256 |
86f653a1599dd07927520ca5f293cccb9785fa49dea463914da96bad573aef2d
|
File details
Details for the file agentlift-0.6.0-py3-none-any.whl.
File metadata
- Download URL: agentlift-0.6.0-py3-none-any.whl
- Upload date:
- Size: 107.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fae0cf8ef6317b405f94206c83d0b464729c32368d14ec575ee3711bbb03cb05
|
|
| MD5 |
b2fbbea820274ad25a726cfca817db8d
|
|
| BLAKE2b-256 |
7df79ee703c7a674c9a1038f1fcad8c54b977332569a3e11f036c10b889022ca
|