Skip to content

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 *CheckWeather to see the Agentforce agents that share an Apex action.
  • Across platforms: test_allthethings has a proposed topic that calls api.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.