Administer

Organizations

On this page

What an organization owns

An organization is your team's shared account on Valet. It owns every skill, artifact, app and agent published to it, along with their connectors, resources, channels and env vars.

When someone leaves, what they built keeps running. The dashboard lists each artifact, app and agent with the person who published it, but that person doesn't own it.

Names and addresses

The organization's name is part of every address it serves:

https://<name>.<org>.valet.run

A name is 3 to 63 lowercase letters, digits and hyphens, and starts and ends with a letter or digit. Some names, such as admin, api and www, are reserved. An organization can't be renamed.

More than one organization

A person can belong to several organizations. Create one in the dashboard or with valet orgs create <name>. list_orgs, or valet orgs, lists yours.

MCP tools act on the organization named by org_name, or else the organization you joined first. CLI commands act on the organization named by --org, then the organization linked to the current folder, then your default organization. Set the default with valet orgs set-default <org>.

Members and invitations

Membership gives access to the organization's services. Someone who isn't a member can't open what the organization keeps private.

Invite and join

Invite people from the dashboard's Team page, or:

No MCP tool does this. Use the CLI.

Valet emails the person a link and a code. An invitation lasts 7 days and works once. The Team page also shows each pending invitation's link, to send another way if the email doesn't arrive.

The code isn't tied to the address it was sent to: whoever holds it can join. Revoke an invitation you no longer want:

No MCP tool does this. Use the CLI.

To join, open the link or run valet orgs join <code>. Someone who signs up with the invited address also sees the invitation during onboarding. valet orgs members acme lists members and pending invitations.

Leave or remove

No MCP tool does this. Use the CLI.

You can't remove yourself; leave instead. The last member can't leave until they add another member or delete the organization.

Valet checks membership on every request. Removing a member ends their access to the organization, including its private artifacts and apps, at their next request. What they published stays.

Sign-in

People sign in to Valet with an email and password or a Google account. One sign-in covers the dashboard, the CLI (valet auth login), MCP clients such as claude.ai, and every private artifact and app in their organizations.

Signing in doesn't add anyone to an organization. Membership comes only from an invitation, or from creating the organization.

Valet has no per-organization connection to your company's identity provider: no SAML or OIDC sign-in setting and no SCIM provisioning. Your directory doesn't add or remove Valet members, so remove people from the organization when they leave the company.

Who can reach what's published

Artifact

Who can reach it
Private, password or public, plus named people by email
Details
Artifacts

App

Who can reach it
Private, password or public
Details
Apps

Agent

Who can reach it
Whoever its channels let in
Details
Agents
  • Private admits organization members. Password adds anyone with the password. Public admits anyone.
  • New artifacts and apps start private.
  • Valet checks access before an artifact or app sees the request. An app learns nothing about who the visitor is.
  • An agent has no page; its channels decide who reaches it. On Slack, anyone who can message the agent there reaches it. An MCP channel with sign-in admits organization members. A webhook, or an MCP channel's token, admits whoever holds the secret.

Logs and visibility

The dashboard lists every artifact, app and agent in the organization, with who published each. The MCP tool list_services returns the same list, skills included, with each one's access mode and author. The organization's skills are under Skills, and list_skills returns them. Valet records who created a skill and who published its latest release, and each release is a Git commit with the time it was saved.

get_logs returns an app's or agent's recent log lines, and valet logs -f follows them. Valet keeps only recent lines, 72 hours by default.

A drain sends telemetry to your own system over OTLP HTTP. Give a base URL, and the drain stores a /v1/logs endpoint and a /v1/traces endpoint. A drain carries logs and traces. A URL that ends in /v1/logs stores a logs endpoint alone. Pass --signals to choose among logs, traces and metrics. --signals metrics derives the metrics endpoint from the base URL, and no --metrics-endpoint flag exists yet. Valet sends no platform metrics.

No MCP tool does this. Use the CLI.

  • A drain belongs to one artifact, app or agent, or to the organization. An organization drain receives every artifact, app, agent and skill in the organization, and only an Admin can create or destroy one. Create it with --org and no --agent: valet drains create https://otlp.example.com --org acme.
  • valet drains on a service lists its own drains and its organization's. A service can't destroy an organization drain.
  • The endpoint must be an https URL.
  • Valet stores header values encrypted.
  • For an artifact or app, the drain also receives one access event per request: method, path, host, status, duration, response size, and a failure code when Valet hit an error. Access events don't record who made the request.
  • Every log record, access event and span carries these resource attributes: service.name (the name of the artifact, app or agent), service.namespace (your organization's name), service.instance.id (the process, such as web.1), valet.org.id, valet.service.id, valet.service.kind (site, app, agent or skill), valet.agent.id and valet.process.name. A log record also carries valet.log.source; spans and access events do not. service.name used to be the constant valet, so a query that filters on that value needs the artifact's name instead.
  • Traces follow one request through Valet. See Traces below.
  • Two drains with the same endpoint and the same headers receive each batch once.
  • Delivery is best effort: Valet drops a batch an endpoint keeps refusing.

Traces

A drain with a traces endpoint receives these spans. Valet sets the resource attributes above on each one and removes any valet.* resource attribute your own code sent, so those keys always describe the service that produced the span. Other resource, span and scope attributes pass through unchanged.

<method> <route>, such as GET /{path...}

Scope
valet.gateway
What it covers
A request to a site or app.

invoke_agent <agent>

Scope
valet.agent
What it covers
One turn of an agent.

chat <model>

Scope
valet.agent
What it covers
One call to the model in a turn.

execute_tool <tool>

Scope
valet.agent
What it covers
One tool call.

mcp.call <connector>

Scope
valet.gateway
What it covers
A call a site's page makes through a connector.

Treat the span names and scopes as a stable contract. A request that arrives with a traceparent header joins the caller's trace. A request to a site or app that arrives without one starts a new trace at the gateway, and an agent turn with no trace starts its own. The route in a span name is a template, not the request path: a site or app request is GET /{path...}, so one name covers every path. A request span carries the method, route, path, host, status, response size and failure code. The agent spans follow the OpenTelemetry GenAI conventions: the operation, provider, model and token counts for a model call, and the tool name for a tool call. No span carries a query string, header, prompt, reply, tool argument or tool result. A failed span has an error status with a fixed message, not the error text.

Valet drops a span batch that an endpoint keeps refusing, as it does a log batch.

Valet has no audit log. It doesn't record which member changed an access mode, edited a skill, or invited or removed someone.

Delete an organization

The dashboard has no delete button; use the CLI to delete an organization. Destroy what the organization owns first: its agents, apps and artifacts, then the connectors and resources they held. Then run:

No MCP tool does this. Use the CLI.

The CLI asks you to confirm. In a script, which has no terminal to answer the prompt, pass --yes to skip it. The organization, its members and its invitations are gone, with no undo.

Next steps