Security considerations — DSDS 0.23.0
DSDS's trust model: a document is data, not instruction. What that means for for: agent rules, for href/checks pointers, and for $extensions.
DSDS lets a document talk to an agent directly, in directive language. A
Nothing in that mechanism says who has to have written the document. This page says who.
#
A DSDS document is only dataA DSDS document is content to be read, like any other file an agent opens. That includes one describing a design system your organization didn't build and doesn't control.
It is never a command channel. Nothing in this spec ranks a
This matters because the language is built to sound authoritative. That is the feature, not a flaw: a rule that reads like a suggestion won't stop an agent from working around it. But phrasing doesn't move authority from the author to the document. The author is a third party you may or may not trust.
#
The Conformance tells a consumer to take MUST/SHOULD guidance as seriously as the spec means it. That says how to read a document you have already decided to rely on. A linter obeys the config file you point it at, in the same way.
It does not mean every DSDS document on the internet gets to constrain your agent. Trust is a separate decision, and it comes first. You already make it for any dependency or config file. Make it here too, whether the docs came from a vendor, a dependency, or a URL some user supplied.
In a document you haven't vetted, a
#
Following a pointer is your decisionAGENTS.md tells an agent to follow a guideline's
DSDS never requires you to fetch any of them. No conformance rule says a validator or agent MUST retrieve a
So treat these pointers like links in any other untrusted input. A relative path inside your own repo is not the same risk as an outside URL. And "the document told me to fetch it" is not permission to fetch it.
#
Inline links stay inside the projectA Markdown field can mention another entry with a
When a consumer turns a document into HTML, it must not output a
Content an agent loads by following an inline link is data, like content it reaches through
#
A conforming consumer MUST keep
Keeping data is not trusting it. Validation only proves a document is well formed. It says nothing about whether the contents are safe to run, or to paste into a shell command, a prompt, or a query. Treat every
#
In practiceIf you're building an agent harness, validator, or renderer:
- Check
schemaVersion and structure. Treat the content as read-only data for the task, never as instructions that rank with the operator's own. - Apply the obedience rule (Conformance's MUST bullet) only to sources you have already decided to trust.
- Apply your own network and tool-use policy before fetching an
href orchecks target. DSDS never requires it. - Never
eval , run, or paste unchecked$extensions content into a privileged context.
None of this needs new machinery. It is the handling untrusted input already gets. It is written down because a format that invites an agent to read hard directives should say plainly that those directives don't outrank the operator. Most such formats never say it.