DSAIL Quickstarts Guides Compare REST MCP tools Errors Legal Support

"Quickstart: Codex"

Install the dsail package, register DSAIL once for Codex CLI, the IDE extension and the ChatGPT desktop app, and let Codex compile and check a policy from the repository — over MCP locally, over REST in a cloud task.

For Codex in a repository. Turn a written policy into rules a program can check; the rules live in the repo and every check runs on the hosted service.

1. Install and register

pip install dsail
dsail init

dsail init writes, idempotently: the DSAIL skill at .agents/skills/dsail/SKILL.md (the path Codex reads; the same bytes go to .claude/skills/dsail/SKILL.md for Claude Code), a marked [mcp_servers.dsail] table in .codex/config.toml launching the stdio proxy dsail mcp, the .mcp.json entry, and a stanza in AGENTS.md. Commit them.

Then register the server once. Codex CLI, the Codex IDE extension and the ChatGPT desktop app share one MCP configuration, so this makes it visible in all three; a project-level table alone may not be read:

codex mcp add dsail -- "$(command -v dsail)" mcp

(dsail init prints this line with the absolute path filled in. The absolute path matters: Codex may spawn the server without your shell's PATH.) Check with /mcp inside Codex: dsail should list ten dsail_* tools plus dsail_open_review.

Or install the Codex plugin, one installable carrying the skill and the MCP server. The public package repository is a Codex marketplace:

codex plugin marketplace add https://github.com/JaxonAI/dsail

Then /plugins in Codex and install DSAIL. The same plugin is also installable from a checkout or a bundle you build yourself (dsail plugin-bundle dist/plugin-bundle, then codex plugin marketplace add "$PWD/dist/plugin-bundle").

2. One command

codex "Encode our records-retention policy as rules a program can check: \
       customer files are kept seven years after account closure, and nothing \
       tagged legal-hold is deleted."

Codex reads the stanza and the skill, follows the authoring sequence — English summary, your confirmation, then DSAIL — and compiles through the dsail_compile tool. An evaluation credential is obtained automatically on the first call.

3. A result

dsail check policies/retention.dsail --claims claims.json --summary
kept_seven_years   TRUE
legal_hold_kept    UNKNOWN   (legal_hold submitted as unknown)

The second line is the point: a fact the document did not settle is reported as UNKNOWN, not guessed either way. Unknown is an answer, not a guess.

Codex cloud tasks: no MCP layer, REST only

A Codex cloud task has no MCP layer at all — not a reduced one. There the package's REST path carries the whole workflow: dsail compile, dsail check, dsail prompt-pack, and dsail.Client in code, all the same operations on the same hosted engine with the same results. The agent has no tool list to notice DSAIL in, so the AGENTS.md stanza and the skill dsail init wrote are its whole discovery; both say outright that the CLI and the client are the intended path when no dsail_* tool is listed.

Two things the environment needs, both one-time, both in the environment's settings (Codex → Environments → Edit → Agent internet access):

If the domain is not allowlisted, the first call fails with a message that names exactly that fix — and only that fix. The package detects Codex from the environment it runs in (CODEX_* variables) and does not describe Claude Code's connector or workspace allowlist there; DSAIL_AGENT_ENV=codex forces the choice if detection cannot. Relay the message verbatim.

Notes specific to Codex

Sharing with colleagues

Saved rulesets belong to a workspace — yours, plus one per team you are in. dsail team create, dsail team invite <team-id> <email> (a single-use link you pass on yourself, since the service sends no mail), and dsail copy <name> --to <team> to put existing work into one. dsail workspaces says where you are.

Anything about who is in a team needs a signed-in person rather than a stored credential, so run dsail login once — one browser round trip, and your API key is untouched, since that is what the programs you write should keep carrying. A call refused for this reason names the command. Full walkthrough: share policy rulesets with colleagues.

Every error carries a docs URL (Errors). Next: Quickstart: REST.