Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -320,7 +320,7 @@ which engine pod's boxes dial their tool bridge on loopback
`(*Bridge).Reaches` in `internal/api/mcpbridge/mcpbridge.go`) to
`internal/controller/company_workload.go`, which gives every engine pod the
Company's public address as `CREWLET_MCP_BRIDGE_URL` for the runs placed in
E2B and the Dashboard Assistant's deep work alone, to
E2B and Ask Crewlet's deep work alone, to
`internal/render/bootstrap.go`, which binds a seat pod's `api.port` on every
interface so that its own `Direct` boxes reach it on loopback, to
`internal/controller/company_exposure.go`, which under `Isolated` lets the
Expand Down
32 changes: 16 additions & 16 deletions api/v1alpha1/company_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -165,28 +165,28 @@ type CompanyLLMSettings struct {
UsePlatformProviders *bool `json:"usePlatformProviders,omitempty"`
}

// CompanyAssistant is whether the company runs the Dashboard Assistant, the
// models it runs on and the bounds of one turn. It maps onto Crewlet's
// CompanyAssistant is whether the company runs Ask Crewlet, the models it
// runs on and the bounds of one turn. It maps onto Crewlet's
// `assistant` block, each field onto the field it names.
//
// The assistant answers a signed-in person's questions about the company and
// Ask Crewlet answers a signed-in person's questions about the company and
// prepares changes for that person to approve, acting only as them: every
// read is a request of theirs, and nothing is written until they approve.
// Every provider in llm must drive a CLI Crewlet runs with no tool of its
// own (ClaudeCode or Pi; Codex keeps a shell its sandbox only confines, and
// OpenCode's has not been measured to go), with webTools Denied: the
// assistant runs it in the engine's pod, never as a seat's executor runs. Crewlet refuses any other in the dry run before every apply, and
// OpenCode's has not been measured to go), with webTools Denied: Ask
// Crewlet runs it in the engine's pod, never as a seat's executor runs. Crewlet refuses any other in the dry run before every apply, and
// the refusal is reported on the Company, since the rule turns on the
// providers' own specs.
// +kubebuilder:validation:MinProperties=1
// +kubebuilder:validation:XValidation:rule="!has(self.enabled) || !self.enabled || (has(self.llm) && size(self.llm) > 0)",message="an enabled assistant needs llm: name the model provider it runs on, one whose webTools is Denied",fieldPath=".llm"
// +kubebuilder:validation:XValidation:rule="!has(self.enabled) || !self.enabled || (has(self.llm) && size(self.llm) > 0)",message="Ask Crewlet, when enabled, needs llm: name the model provider it runs on, one whose webTools is Denied",fieldPath=".llm"
type CompanyAssistant struct {
// enabled runs the assistant. Unset or false leaves it off. Crewlet's
// enabled runs Ask Crewlet. Unset or false leaves it off. Crewlet's
// `enabled`.
// +optional
Enabled *bool `json:"enabled,omitempty"`

// llm is the assistant's model chain, the first provider tried first,
// llm is Ask Crewlet's model chain, the first provider tried first,
// referred to as a Seat's chain is. Required when enabled is true.
// Crewlet's `llm`.
// +optional
Expand Down Expand Up @@ -224,27 +224,27 @@ type CompanyAssistant struct {
// +kubebuilder:validation:Maximum=365
RetentionDays int32 `json:"retentionDays,omitempty"`

// tokenBudget caps the tokens each person's assistant may spend per
// tokenBudget caps the tokens Ask Crewlet may spend for each person per
// window, charged on top of the company's own spec.tokenBudget.
// Crewlet's `token_budget`.
// +optional
TokenBudget TokenBudget `json:"tokenBudget,omitzero"`

// deepWork lets the assistant hand a large task (research, scripts,
// deepWork lets Ask Crewlet hand a large task (research, scripts,
// files, many steps) to a coding CLI running its own tools in a box of
// its own, which needs spec.sandbox. Unset, the assistant answers in
// its own, which needs spec.sandbox. Unset, Ask Crewlet answers in
// quick mode only. Crewlet's `deep_work`.
// +optional
DeepWork CompanyAssistantDeepWork `json:"deepWork,omitzero"`
}

// CompanyAssistantDeepWork is the Dashboard Assistant's deep work: the model
// a large task is handed to and the bounds of one run. It maps onto Crewlet's
// CompanyAssistantDeepWork is Ask Crewlet's deep work: the model a large
// task is handed to and the bounds of one run. It maps onto Crewlet's
// `assistant.deep_work` block, each field onto the field it names.
//
// A deep-work run is Claude Code in its own harness, with its shell, its
// files and its web tools: the point of the escalation. Its one way into
// Crewlet is the signed-in person's own assistant tools over the tool
// Crewlet is the signed-in person's own Ask Crewlet tools over the tool
// bridge, so every read is still that person's request and every write still
// a proposal they approve. The provider llm names must drive ClaudeCode:
// Crewlet confines a deep-work run on the engine pod around that one CLI's
Expand Down Expand Up @@ -869,7 +869,7 @@ type CompanyExposure struct {
// coding runs call the engine back on, overriding the one the class's
// webhooks.hostname derives. A seat's executor run in E2B calls the
// engine's tool bridge there, and exports its traces there while the
// class sends telemetry, and the Dashboard Assistant's deep work calls
// class sends telemetry, and Ask Crewlet's deep work calls
// the bridge there wherever it runs; a seat's Direct run, on a data pod
// or a seat pod, dials its own pod's listener on loopback for both.
// Required
Expand Down Expand Up @@ -1215,7 +1215,7 @@ type CompanySpec struct {
// +optional
LLM CompanyLLMSettings `json:"llm,omitzero"`

// assistant is the company's Dashboard Assistant. Unset leaves it off.
// assistant configures Ask Crewlet. Unset leaves it off.
// Crewlet's `assistant`.
// +optional
Assistant CompanyAssistant `json:"assistant,omitzero"`
Expand Down
6 changes: 3 additions & 3 deletions api/v1alpha1/engineclass_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -198,7 +198,7 @@ type DataPodSettings struct {
// resumes or its pause TTL expires (the Seat's pauseTTLSeconds, else the
// Company's spec.sandbox.defaultPauseTTLSeconds, 1800 seconds unless
// set; 0 removes the box at once). It holds the confined box of each
// Dashboard Assistant deep-work run placed on the pod too, in a
// Ask Crewlet deep-work run placed on the pod too, in a
// directory of its own. A box is removed when its run ends, and holds
// the run's checkout, its coding CLI's home and temporary files, and
// whatever the run installs and builds. A pod whose boxes
Expand Down Expand Up @@ -607,7 +607,7 @@ const (

// WebhookExposure is how vendors' webhooks, and the calls coding runs make
// back to the engine, reach a company's engine: the tool bridge calls and the
// traces of a seat's executor run in E2B, and the Dashboard Assistant's deep
// traces of a seat's executor run in E2B, and Ask Crewlet's deep
// work's calls, a seat's Direct run dialling its own engine pod on loopback
// instead. Whatever the mode, they
// reach the engine's public listener (Crewlet's api.public), a port of its
Expand Down Expand Up @@ -894,7 +894,7 @@ type NetworkPolicySettings struct {
// code host and the package registries it installs from are reached
// from the pod; it calls its tools and sends its traces to its own pod's
// listener on loopback, which no policy polices. A data pod also calls
// the Company's public address, for the Dashboard Assistant's deep work,
// the Company's public address, for Ask Crewlet's deep work,
// which Crewlet holds to it in whichever cell it runs. A call that lands
// on the public route's proxies inside the cluster is admitted by a rule
// of the data pods' own, naming the webhooks route's proxy namespaces or
Expand Down
8 changes: 4 additions & 4 deletions api/v1alpha1/llmprovider_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,9 @@ const (
// `denied`).
//
// A seat keeps its CLI's web tools: it must not have less reach than the
// same CLI at a terminal. A provider the Company's Dashboard Assistant runs
// on turns them off, which Crewlet requires of every model in
// spec.assistant.llm: the assistant reads only what the signed-in person's
// same CLI at a terminal. A provider Ask Crewlet runs on turns
// them off, which Crewlet requires of every model in
// spec.assistant.llm: Ask Crewlet reads only what the signed-in person's
// own requests return, and a page the model fetched for itself is text no
// authority decision saw. Crewlet turns them off only for a CLI whose profile
// carries a measured way to (its web_denial): ClaudeCode, Codex, OpenCode and
Expand Down Expand Up @@ -270,7 +270,7 @@ type LLMProviderSettings struct {

// webTools is whether the CLI keeps its own web tools. Unset is
// Allowed, every seat's default. Denied is required of every provider
// the Company's Dashboard Assistant runs on (spec.assistant.llm), and
// Ask Crewlet runs on (spec.assistant.llm), and
// is refused for a CLI Crewlet has no way to turn the web off for: it
// takes ClaudeCode, Codex, OpenCode or Pi. Crewlet's
// `overrides.web_tools`.
Expand Down
16 changes: 8 additions & 8 deletions config/crd/bases/crewlet.ai_companies.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -72,15 +72,15 @@ spec:
properties:
assistant:
description: |-
assistant is the company's Dashboard Assistant. Unset leaves it off.
assistant configures Ask Crewlet. Unset leaves it off.
Crewlet's `assistant`.
minProperties: 1
properties:
deepWork:
description: |-
deepWork lets the assistant hand a large task (research, scripts,
deepWork lets Ask Crewlet hand a large task (research, scripts,
files, many steps) to a coding CLI running its own tools in a box of
its own, which needs spec.sandbox. Unset, the assistant answers in
its own, which needs spec.sandbox. Unset, Ask Crewlet answers in
quick mode only. Crewlet's `deep_work`.
properties:
llm:
Expand Down Expand Up @@ -137,12 +137,12 @@ spec:
type: object
enabled:
description: |-
enabled runs the assistant. Unset or false leaves it off. Crewlet's
enabled runs Ask Crewlet. Unset or false leaves it off. Crewlet's
`enabled`.
type: boolean
llm:
description: |-
llm is the assistant's model chain, the first provider tried first,
llm is Ask Crewlet's model chain, the first provider tried first,
referred to as a Seat's chain is. Required when enabled is true.
Crewlet's `llm`.
items:
Expand Down Expand Up @@ -201,7 +201,7 @@ spec:
type: integer
tokenBudget:
description: |-
tokenBudget caps the tokens each person's assistant may spend per
tokenBudget caps the tokens Ask Crewlet may spend for each person per
window, charged on top of the company's own spec.tokenBudget.
Crewlet's `token_budget`.
minProperties: 1
Expand Down Expand Up @@ -236,7 +236,7 @@ spec:
type: object
x-kubernetes-validations:
- fieldPath: .llm
message: 'an enabled assistant needs llm: name the model provider
message: 'Ask Crewlet, when enabled, needs llm: name the model provider
it runs on, one whose webTools is Denied'
rule: '!has(self.enabled) || !self.enabled || (has(self.llm) &&
size(self.llm) > 0)'
Expand Down Expand Up @@ -588,7 +588,7 @@ spec:
coding runs call the engine back on, overriding the one the class's
webhooks.hostname derives. A seat's executor run in E2B calls the
engine's tool bridge there, and exports its traces there while the
class sends telemetry, and the Dashboard Assistant's deep work calls
class sends telemetry, and Ask Crewlet's deep work calls
the bridge there wherever it runs; a seat's Direct run, on a data pod
or a seat pod, dials its own pod's listener on loopback for both.
Required
Expand Down
6 changes: 3 additions & 3 deletions config/crd/bases/crewlet.ai_engineclasses.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -227,7 +227,7 @@ spec:
resumes or its pause TTL expires (the Seat's pauseTTLSeconds, else the
Company's spec.sandbox.defaultPauseTTLSeconds, 1800 seconds unless
set; 0 removes the box at once). It holds the confined box of each
Dashboard Assistant deep-work run placed on the pod too, in a
Ask Crewlet deep-work run placed on the pod too, in a
directory of its own. A box is removed when its run ends, and holds
the run's checkout, its coding CLI's home and temporary files, and
whatever the run installs and builds. A pod whose boxes
Expand Down Expand Up @@ -1368,7 +1368,7 @@ spec:
code host and the package registries it installs from are reached
from the pod; it calls its tools and sends its traces to its own pod's
listener on loopback, which no policy polices. A data pod also calls
the Company's public address, for the Dashboard Assistant's deep work,
the Company's public address, for Ask Crewlet's deep work,
which Crewlet holds to it in whichever cell it runs. A call that lands
on the public route's proxies inside the cluster is admitted by a rule
of the data pods' own, naming the webhooks route's proxy namespaces or
Expand Down Expand Up @@ -1953,7 +1953,7 @@ spec:
description: |-
webTools is whether the CLI keeps its own web tools. Unset is
Allowed, every seat's default. Denied is required of every provider
the Company's Dashboard Assistant runs on (spec.assistant.llm), and
Ask Crewlet runs on (spec.assistant.llm), and
is refused for a CLI Crewlet has no way to turn the web off for: it
takes ClaudeCode, Codex, OpenCode or Pi. Crewlet's
`overrides.web_tools`.
Expand Down
2 changes: 1 addition & 1 deletion config/crd/bases/crewlet.ai_llmproviders.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -381,7 +381,7 @@ spec:
description: |-
webTools is whether the CLI keeps its own web tools. Unset is
Allowed, every seat's default. Denied is required of every provider
the Company's Dashboard Assistant runs on (spec.assistant.llm), and
Ask Crewlet runs on (spec.assistant.llm), and
is refused for a CLI Crewlet has no way to turn the web off for: it
takes ClaudeCode, Codex, OpenCode or Pi. Crewlet's
`overrides.web_tools`.
Expand Down
16 changes: 8 additions & 8 deletions dist/chart/templates/crd/companies.crewlet.ai.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -75,15 +75,15 @@ spec:
properties:
assistant:
description: |-
assistant is the company's Dashboard Assistant. Unset leaves it off.
assistant configures Ask Crewlet. Unset leaves it off.
Crewlet's `assistant`.
minProperties: 1
properties:
deepWork:
description: |-
deepWork lets the assistant hand a large task (research, scripts,
deepWork lets Ask Crewlet hand a large task (research, scripts,
files, many steps) to a coding CLI running its own tools in a box of
its own, which needs spec.sandbox. Unset, the assistant answers in
its own, which needs spec.sandbox. Unset, Ask Crewlet answers in
quick mode only. Crewlet's `deep_work`.
properties:
llm:
Expand Down Expand Up @@ -140,12 +140,12 @@ spec:
type: object
enabled:
description: |-
enabled runs the assistant. Unset or false leaves it off. Crewlet's
enabled runs Ask Crewlet. Unset or false leaves it off. Crewlet's
`enabled`.
type: boolean
llm:
description: |-
llm is the assistant's model chain, the first provider tried first,
llm is Ask Crewlet's model chain, the first provider tried first,
referred to as a Seat's chain is. Required when enabled is true.
Crewlet's `llm`.
items:
Expand Down Expand Up @@ -204,7 +204,7 @@ spec:
type: integer
tokenBudget:
description: |-
tokenBudget caps the tokens each person's assistant may spend per
tokenBudget caps the tokens Ask Crewlet may spend for each person per
window, charged on top of the company's own spec.tokenBudget.
Crewlet's `token_budget`.
minProperties: 1
Expand Down Expand Up @@ -239,7 +239,7 @@ spec:
type: object
x-kubernetes-validations:
- fieldPath: .llm
message: 'an enabled assistant needs llm: name the model provider
message: 'Ask Crewlet, when enabled, needs llm: name the model provider
it runs on, one whose webTools is Denied'
rule: '!has(self.enabled) || !self.enabled || (has(self.llm) &&
size(self.llm) > 0)'
Expand Down Expand Up @@ -591,7 +591,7 @@ spec:
coding runs call the engine back on, overriding the one the class's
webhooks.hostname derives. A seat's executor run in E2B calls the
engine's tool bridge there, and exports its traces there while the
class sends telemetry, and the Dashboard Assistant's deep work calls
class sends telemetry, and Ask Crewlet's deep work calls
the bridge there wherever it runs; a seat's Direct run, on a data pod
or a seat pod, dials its own pod's listener on loopback for both.
Required
Expand Down
Loading
Loading