# DSAIL > Turn a written policy into rules a program can check, and get the same answer every time. DSAIL turns a written policy into a formal ruleset and returns, for every assertion in it, TRUE, FALSE, UNKNOWN or AMBIGUOUS over claim values you extract — with a counterexample when one is violated, and no model in the loop. Reachable over MCP (`https://agents.jaxon.ai/mcp`) and REST (`https://agents.jaxon.ai/v1`), and from a coding agent through the `dsail` Python package. Every page below is markdown. The same path with `.html` is the same page for a browser. The REST specification is `https://agents.jaxon.ai/openapi.json`. ## Start here - [DSAIL, for agents](https://docs.agents.jaxon.ai/index.md): Turn a written policy into rules a program can check, and get the same answer every time. What DSAIL is, what it answers, and the one-page route in from each surface. ## Quickstarts, one per surface - ["Quickstart: ChatGPT"](https://docs.agents.jaxon.ai/quickstart/chatgpt.md): Add DSAIL to ChatGPT as a private app through Developer mode, describe one policy, and get a checked result. - ["Quickstart: claude.ai"](https://docs.agents.jaxon.ai/quickstart/claude-ai.md): Add the DSAIL connector to claude.ai, describe one policy, and get a checked result — three steps, no code. - ["Quickstart: Claude Code"](https://docs.agents.jaxon.ai/quickstart/claude-code.md): Install the dsail package, run dsail init once, and let Claude Code compile and check a policy from the repository. - ["Quickstart: Codex"](https://docs.agents.jaxon.ai/quickstart/codex.md): Install the dsail package, register the stdio proxy with Codex CLI, and let Codex compile and check a policy from the repository. - ["Quickstart: REST"](https://docs.agents.jaxon.ai/quickstart/rest.md): Three curl calls against the hosted service — a credential, a compile, a check — and the exact JSON that comes back. ## Guides - [Check LLM output against a written policy without another LLM as the judge](https://docs.agents.jaxon.ai/guides/no-model-in-the-loop.md): How to check extracted values against a written policy with no model in the loop — extraction on your model, the check on a solver, and what that buys you. - [Turn a policy document into rules a program can check](https://docs.agents.jaxon.ai/guides/policy-to-rules.md): The route from a policy written in English to a compiled, hash-addressed ruleset a program checks facts against — what the language looks like and what the compiler refuses. - [Enforce a written policy in an LLM application and get the same answer every time](https://docs.agents.jaxon.ai/guides/same-answer-every-time.md): Why an LLM-judged policy check drifts, and how to check extracted values against a written policy so the same facts produce the same bytes, every time. - [Policy check when a value cannot be determined from the document](https://docs.agents.jaxon.ai/guides/unknown-is-an-answer.md): How to check a policy against a document that does not settle every fact — submit unknown, get UNKNOWN back, and never let a missing value read as a pass or a failure. - [Explain a policy decision with the rule that decided and a counterexample](https://docs.agents.jaxon.ai/guides/which-rule-decided.md): How a DSAIL check names the assertion that failed and the values under which it fails, so a person can be told exactly why — and why there is no combined verdict. ## Compared with what you already know - [DSAIL compared with Cedar](https://docs.agents.jaxon.ai/compare/cedar.md): When you already know Cedar, what DSAIL does differently, what it does not do, and which one a task actually needs. - [DSAIL compared with guardrail frameworks](https://docs.agents.jaxon.ai/compare/guardrails.md): When you already know Guardrails AI, NeMo Guardrails or Bedrock Guardrails, what DSAIL does differently and which one the task needs. - [DSAIL compared with OPA (Open Policy Agent)](https://docs.agents.jaxon.ai/compare/opa.md): When you already know OPA and Rego, what DSAIL does differently, what it does not do, and how to tell which one a task needs. ## Reference - [Error codes](https://docs.agents.jaxon.ai/reference/errors.md): Every error code the DSAIL service returns, its HTTP status, and the page that resolves it. - [MCP tools reference](https://docs.agents.jaxon.ai/reference/mcp-tools.md): Every tool the DSAIL MCP server publishes — name, description and arguments — as a connected model sees them. - [REST API reference](https://docs.agents.jaxon.ai/reference/rest-api.md): Every route of the hosted DSAIL service, rendered from its published OpenAPI document, so an agent can read the contract before connecting. - [MCP server instructions](https://docs.agents.jaxon.ai/reference/server-instructions.md): The instructions the DSAIL MCP server sends a model on every connection, verbatim. ## Errors, one page per code - [BAD_REQUEST](https://docs.agents.jaxon.ai/errors/bad-request.md): The request was malformed and never reached the validation contract. HTTP 400. The message names the field and the shape expected. - [BUDGET_EXCEEDED](https://docs.agents.jaxon.ai/errors/budget-exceeded.md): A per-request complexity budget was exceeded before any solving started. HTTP 413. Split the ruleset or the claim dictionary. - [COMPILE_FAILED](https://docs.agents.jaxon.ai/errors/compile-failed.md): The DSAIL source did not compile. HTTP 422. The response carries line-numbered diagnostics and the grammar guide; fix the source and compile again. - [CREDENTIAL_INVALID](https://docs.agents.jaxon.ai/errors/credential-invalid.md): The credential presented is unknown, revoked or expired. HTTP 401. Replace it the way the first one was obtained. - [CREDENTIAL_REQUIRED](https://docs.agents.jaxon.ai/errors/credential-required.md): This deployment requires a credential on every call and none was presented. HTTP 401. Obtain an evaluation credential with one POST, no sign-up, and retry. - [CREDENTIAL_SCOPE](https://docs.agents.jaxon.ai/errors/credential-scope.md): The credential's grade does not permit this operation. HTTP 403. Evaluation credentials compile and check; storage needs a full credential. - [ENGINE_ERROR](https://docs.agents.jaxon.ai/errors/engine-error.md): The compiler or solver failed in a way that is not a fault in the request. HTTP 500. Retry once; if it persists, report the versions block. - [EVALUATION_LIMIT](https://docs.agents.jaxon.ai/errors/evaluation-limit.md): An evaluation cap is exhausted for today or for this credential's lifetime. HTTP 429. Wait for the daily reset or ask for a full credential. - [RULESET_NOT_FOUND](https://docs.agents.jaxon.ai/errors/ruleset-not-found.md): No stored ruleset or name binding matches the reference given. HTTP 404. Compile the source again, or load by the name it was saved under. - [VALIDATION_REJECTED](https://docs.agents.jaxon.ai/errors/validation-rejected.md): The claim dictionary did not satisfy the ruleset's validation contract. HTTP 422. Every failing field is named at once. ## Terms, privacy and data handling - [Data handling](https://docs.agents.jaxon.ai/legal/data-handling.md): Placeholder for the DSAIL hosted service data-handling statement. The text is being prepared; this route exists so every artifact can already point at it. - [Privacy policy](https://docs.agents.jaxon.ai/legal/privacy.md): Placeholder for the DSAIL hosted service privacy policy. The text is being prepared; this route exists so every artifact can already point at it. - [Terms of service](https://docs.agents.jaxon.ai/legal/terms.md): Placeholder for the DSAIL hosted service terms. The text is being prepared; this route exists so every artifact can already point at it.