# 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).