Getting started¶
See it on real agents¶
$ pip install 'marshal-ledger[server]'
$ marshal demo
$ marshal web --db demo.sqlite
marshal demo downloads public agent definitions from GitHub, each pinned to a commit, and records 28 agents from Databricks, Bedrock, AgentCore, Copilot Studio, Agentforce, Google ADK and ADL, with a short history. Open the inventory, then:
agent_openai_agents_sdk/agent_openai_agents_sdk: a proposed change that lets the agent run a function that issues refunds, with the grant it needs, both ranked MED.eval_testAgent: a Copilot Studio agent that drifted after one of its tools was switched to the maker's credentials.mpa_LeaveManagement: a Copilot Studio agent read from an exported solution. Its topics read Dataverse and Office 365 as the signed-in user, and it calls a Power Automate flow, so its identity is unknown rather than guessed.- Dependencies: search for
*CheckWeatherto see the Agentforce agents that share an Apex action. - Across platforms:
test_allthethingshas a proposed topic that callsapi.acme.example. Search for*api.acme.example/invoices*to see the ADL agents whose network boundaries allow the same host.
Read your own agents¶
Point marshal read at an artifact. The format is detected:
$ marshal read path/to/databricks/bundle --target prod
$ marshal read path/to/cloned-copilot-studio-agent
$ marshal read path/to/cdk.out
$ marshal read path/to/agent/repo # Python code: OpenAI Agents SDK, LangChain, ADK, CrewAI, or direct API calls
Each record shows where every value came from (declared, attested, derived, annotation or unknown), and how complete the record is.
For an agent no reader covers, such as one on an in-house platform or in a vendor UI with no export, write its definition by hand in a Marshal file. Its values are recorded as attested by a person, not as declared by the platform:
$ marshal init-agent triage.marshal.yaml --id ops/triage --platform in-house
$ marshal read triage.marshal.yaml
Keep a history¶
$ marshal collect path/to/bundle --target prod --event shipped
$ marshal collect path/to/bundle --target prod --event proposed
$ marshal diff my-team/my_agent # what is proposed against what is shipped, ranked by risk
$ marshal status my-team/my_agent # shipped and live versions, drift, freshness
$ marshal deps "*my_tool" --shipped # who depends on a tool, and where it is live
Translate and assess portability¶
$ marshal convert path/to/agent.adl.yaml --to agent-spec
$ marshal port my-team/my_agent --to all
Put it in your pipelines¶
Run the ingest API (see Deployment) and add the GitHub Action around your deploy step. Pull requests get a risk-ranked comment, deploys are recorded as shipped, and teams never hold store credentials.