Security considerations — DSDS 0.20.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.
#
A conforming consumer MUST keep
Keeping data is not trusting it. Validation only proves the shape 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.