# Project environment, skills and resources
Project trust and dynamic resource discovery — the two places
where the host, not the package, owns the decision. Skills declared by a Pi
package are loaded through DSH's own skill filesystem; MCP servers declared in
Pi config are translated into official `dsh-mcp-client` entries by
`pi2dsh mcp-config` (the Pi MCP adapter's code never runs).
**4 Pi surfaces** — 1 same semantics · 1 mapped, difference stated · 2 not available.
| Pi surface | Kind | Status | What it does on DSH |
|---|---|---|---|
| [`events`](#events-pi) | `pi.*` | Same semantics | Package-local Pi extension event-bus emit/on semantics are preserved for migrated extensions in the same bundle. |
| [`project_trust`](#project_trust-event) | `event` | Not available | Project trust must remain owned by the DSH host; the handler is accepted but never consulted. |
| [`resources_discover`](#resources_discover-event) | `event` | Not available | Dynamic resource discovery must be converted into DSH providers; the handler is accepted but never fires. |
| [`isProjectTrusted`](#isprojecttrusted-ctx) | `ctx.*` | Mapped, difference stated | Fails closed as untrusted because DSH does not expose Pi project-trust state. |
## How each one is built
Every surface below names the DSH mechanism that carries it — the seam, service
or waterfall — so the mapping can be checked against the harness rather than
taken on trust.
### `events`
`pi.*` · Same semantics
A package-local emitter inside the bridge, so extensions bundled together talk to each other exactly as they do under Pi.
### `project_trust`
`event` · Not available
Accepted and never consulted. Trust is a host decision in DSH, and letting a package answer it would move the decision to the code being trusted.
### `resources_discover`
`event` · Not available
Accepted and never fired. Dynamic resource discovery in DSH is a provider registration, which is a different (and official) seam.
### `isProjectTrusted`
`ctx.*` · Mapped, difference stated
No DSH seam carries Pi's project-trust state, so the bridge returns the safe constant instead of inventing one. Pi's own ProjectTrustStore is vendored and available to packages that manage their own.
---
Back to the [capability index](README.md) · the whole verdict in
[pi-abi-coverage.md](../pi-abi-coverage.md).