diff --git a/.agents/references/terminology.md b/.agents/references/terminology.md index f2f008877..e0f46dc09 100644 --- a/.agents/references/terminology.md +++ b/.agents/references/terminology.md @@ -66,6 +66,9 @@ For the summary of the most critical terms (core features, Automation Platform t - **Tab Configs** — Reusable TOML-based tab layout definitions that launch preconfigured terminal sessions. *Usage note:* Capitalize as a feature name. +- **Launch Configuration** / **Launch Configurations** — The legacy, YAML-based way to save a configuration of windows, tabs, and panes. Replaced by Tab Configs; existing Launch Configurations still work but aren't being extended. + *Usage note:* Capitalize as a feature name, including in headings ("Creating a Launch Configuration"). Use "Tab Configs" for new content. + - **Vertical Tabs** — The sidebar-based tab management panel that replaces the horizontal tab bar. *Usage note:* Capitalize as a feature name. @@ -107,6 +110,12 @@ For the summary of the most critical terms (core features, Automation Platform t - **Active AI** — The feature that proactively surfaces fixes and next actions based on terminal errors, inputs, and outputs. Covers Prompt Suggestions, Next Command predictions, and Suggested Code Diffs. *Usage note:* Always capitalize "Active AI" — it is a proper feature name and the label of the Settings toggle. Write the full capability as **Active AI Recommendations**, matching the page title. Lowercase the following word only when it is a plain common noun rather than part of the name, as in "Active AI features" or "the Active AI toggle". +- **Computer Use** — The capability that lets agents interact with a desktop environment (screenshots, clicks, typing) inside a sandboxed cloud environment. + *Usage note:* Capitalize as a feature name, including in headings ("Enabling Computer Use", "How Computer Use works"). + +- **Full Terminal Use** — The capability that lets an agent attach to and drive interactive terminal programs (for example `psql`, `vim`, a dev server) by reading live PTY output. + *Usage note:* Capitalize as a feature name, including in headings. + ## Coding terms (Warp features) - **Code** — Warp's coding experience for agent-assisted changes (editing, diffs, code review). @@ -331,6 +340,8 @@ Docs match the screen; the fix belongs in the app. - **command-line** — hyphenated when used as an adjective - **Git repository** or **repo** — not "git repository" (capitalize "Git") - **macOS** — not "Mac OS" or "Mac" +- **Zero Data Retention (ZDR)** — Warp's agreements with contracted LLM providers not to train on or retain customer data. Capitalize as a proper term, including in headings ("Zero Data Retention (ZDR)"); keep the "(ZDR)" acronym on first mention in a section. +- **SSO (Single Sign-On)** — Authentication through an organization's identity provider (Okta, Microsoft Entra ID, Google Workspace, or any SAML 2.0/OIDC provider). Always capitalize the acronym "SSO"; capitalize "Single Sign-On" when spelled out as the feature name. ## Branded and informal terms diff --git a/.agents/skills/missing_docs/references/feature_surface_map.md b/.agents/skills/missing_docs/references/feature_surface_map.md index c395f6e07..3ef1d878d 100644 --- a/.agents/skills/missing_docs/references/feature_surface_map.md +++ b/.agents/skills/missing_docs/references/feature_surface_map.md @@ -25,12 +25,20 @@ auto-surfaces for docs once the flag goes GA. ## Feature flags -> doc pages -AgentMode -> src/content/docs/agents/local-agents/overview.mdx +# AgentMode's old target (agents/local-agents/overview.mdx) was removed in the +# agents-section reorg; the concept now lives on the Agents tab overview page +# (which literally covers Agent Mode and embeds a video titled "Agent Mode +# Overview"). +AgentMode -> src/content/docs/agents/index.mdx AgentManagementView -> src/content/docs/platform/managing-cloud-agents.md AgentManagementDetailsView -> src/content/docs/platform/managing-cloud-agents.md AgentModeComputerUse -> src/content/docs/agents/capabilities/computer-use/index.mdx AgentModeWorkflows -> src/content/docs/knowledge-and-collaboration/warp-drive/workflows.md -AgentOnboarding -> src/content/docs/agents/getting-started/agents-in-warp.mdx +# AgentOnboarding's old target (agents/getting-started/agents-in-warp.mdx) was +# removed in the same reorg. The first-run agent-onboarding wizard (account +# sign-up, choosing how to access AI) is covered by the "Log in to Warp +# (optional)" section of the installation/setup quickstart. +AgentOnboarding -> src/content/docs/getting-started/quickstart/installation-and-setup.mdx AIRules -> src/content/docs/agents/capabilities/rules.mdx AIResumeButton -> src/content/docs/agents/local-agents/interacting-with-agents/terminal-and-agent-modes.mdx InlineCodeReview -> src/content/docs/agents/local-agents/interactive-code-review.mdx @@ -39,6 +47,9 @@ CodeFindReplace -> src/content/docs/code/code-editor/find-and-replace.md VimCodeEditor -> src/content/docs/code/code-editor/code-editor-vim-keybindings.md McpServer -> src/content/docs/agents/capabilities/mcp.mdx McpOauth -> src/content/docs/agents/capabilities/mcp.mdx +# Factory MCP (the hosted MCP endpoint agents use to work with a factory) is +# GA and documented on the Factory MCP page and related factories/* pages. +FactoryMcp -> src/content/docs/factories/factory-mcp.mdx ImageAsContext -> src/content/docs/agents/local-agents/agent-context/images-as-context.mdx SelectionAsContext -> src/content/docs/agents/local-agents/agent-context/selection-as-context.mdx DiffSetAsContext -> src/content/docs/agents/local-agents/agent-context/selection-as-context.mdx @@ -232,6 +243,11 @@ GeminiEnterprise -> src/content/docs/enterprise/enterprise-features/byollm-gemin # preview -> GA; documented with the rest of Warp's link handling. OscHyperlinks -> src/content/docs/terminal/more-features/files-and-links.mdx +# `--mcp ` CLI shorthand (bare, non-UUID identifiers like +# "linear" resolved server-side). GA; documented alongside the rest of the +# --mcp flag formats. +WellKnownMcpIds -> src/content/docs/reference/cli/mcp-servers.mdx + ## CLI commands -> doc pages # Top-level Oz CLI commands @@ -460,6 +476,49 @@ GET /factory/{uid}/benchmarks/runs/{run_uid} -> internal GET /factory/{uid}/benchmarks/runs/{run_uid}/results -> internal POST /factory/{uid}/benchmarks/runs/{run_uid}/cancel -> internal +# Additional Factory web-app-only backend routes surfaced by the audit +# (router/handlers/public_api/factories.go, factory_files.go, +# factory_file_schemas.go, factory_file_validation.go, factory_access.go, +# factory_scorers.go, benchmarks.go). Same unreleased Factory product as the +# /factory/* routes above — Factory-UI-only backend routes, not part of the +# released public Oz Agent API / OpenAPI spec. +GET /factory-alias/{alias} -> internal +GET /factory-files/schemas -> internal +GET /factory-files/schemas/{schema_version} -> internal +GET /factory-files/schemas/{schema_version}/{document} -> internal +POST /factory-files/validate -> internal +GET /factory-setup/integrations/jira/projects -> internal +GET /factory-setup/integrations/linear/teams -> internal +GET /factory/access -> internal +GET /factory/scorers/{scorer_id}/metrics/pass-rate -> internal +DELETE /factory/scorers/{scorer_id}/self-improvement-config -> internal +GET /factory/scorers/{scorer_id}/self-improvement-config -> internal +PUT /factory/scorers/{scorer_id}/self-improvement-config -> internal +POST /factory/{uid}/benchmarks/suites/{suite_uid}/tasks -> internal +GET /factory/{uid}/gitlab-automation-capability -> internal +POST /factory/{uid}/gitlab-automation-capability/refresh -> internal +GET /factory/{uid}/integration-activations -> internal +GET /factory/{uid}/integration-destinations -> internal +GET /factory/{uid}/integrations/jira/labels -> internal +GET /factory/{uid}/integrations/jira/projects -> internal +GET /factory/{uid}/integrations/jira/statuses -> internal +POST /factory/{uid}/merges -> internal +POST /factory/{uid}/merges/check -> internal +GET /factory/{uid}/merges/{merge_uid} -> internal +GET /factory/{uid}/metrics/cost-by-pr-size -> internal +GET /factory/{uid}/metrics/run-breakdown -> internal +GET /factory/{uid}/metrics/top-prs -> internal +GET /factory/{uid}/review -> internal +POST /factory/{uid}/review/refine -> internal +GET /factory/{uid}/source/export -> internal +GET /factory/{uid}/source/file -> internal +GET /factory/{uid}/source/link-readiness -> internal +GET /factory/{uid}/source/tree -> internal +POST /factory/{uid}/source/clone-url -> internal +PUT /factory/{uid}/source/files -> internal +GET /factory/{uid}/task-by-run -> internal +POST /factory/{uid}/tasks/{task_uid}/cancel -> internal + # Orchestration messaging and lifecycle-event endpoints. These are marked # `x-internal: true` in warp-server's canonical spec (public_api/openapi.yaml), # so the publish filter deliberately strips them from the public docs copy. @@ -740,6 +799,13 @@ EditableMarkdownMermaid # Directory-based tab colors: the user-facing knob is the setting # appearance.tabs.directory_tab_colors, documented in the all-settings reference. DirectoryTabColors +# Internal client-side orchestration event-delivery plumbing (agent-to-agent +# messaging/lifecycle-event transport). Both flags are explicitly documented +# as "no user-visible behavior change" in their design specs (see +# warp/specs/QUALITY-928/TECH.md and warp/specs/QUALITY-919/TECH.md), so they +# need no doc page. +OrchestrationUnifiedStack +WaitForEventsParentRegistration CloudModeHostSelector CodebaseIndexSpeedbump CodebaseIndexPersistence diff --git a/.agents/skills/missing_docs/references/surface_snapshot.json b/.agents/skills/missing_docs/references/surface_snapshot.json index 6c6c7d5fc..a3e8c0631 100644 --- a/.agents/skills/missing_docs/references/surface_snapshot.json +++ b/.agents/skills/missing_docs/references/surface_snapshot.json @@ -96,6 +96,7 @@ "CreateProjectFlow": "ga", "CreatingSharedSessions": "dogfood", "CrossRepoContext": "dogfood", + "CtrlCCancelsThirdPartyHarness": "dogfood", "CustomModelRouters": "ga", "CycleNextCommandSuggestion": "other", "DebugMode": "other", @@ -110,7 +111,7 @@ "EditableMarkdownMermaid": "dogfood", "EmbeddedCodeReviewComments": "other", "ExpandEditToPane": "ga", - "FactoryMcp": "dogfood", + "FactoryMcp": "ga", "FallbackModelLoadOutputMessaging": "ga", "FastForwardAutoexecuteButton": "ga", "FetchChannelVersionsFromWarpServer": "other", @@ -194,6 +195,7 @@ "OpenWarpLaunchModal": "ga", "OpenWarpNewSettingsModes": "ga", "OrchestrationLaunchModal": "ga", + "OrchestrationUnifiedStack": "ga", "OscHyperlinks": "ga", "OzChangelogUpdates": "ga", "OzHandoff": "ga", @@ -204,7 +206,7 @@ "PRCommentsV2": "ga", "PartialNextCommandSuggestions": "other", "PendingUserQueryIndicator": "ga", - "PeriodicHandoffCheckpoints": "other", + "PeriodicHandoffCheckpoints": "dogfood", "PinnedTabs": "ga", "PluggableNotifications": "ga", "PredictAMQueries": "other", @@ -279,7 +281,7 @@ "VideoRecording": "ga", "ViewingSharedSessions": "ga", "VimCodeEditor": "ga", - "WaitForEventsParentRegistration": "dogfood", + "WaitForEventsParentRegistration": "ga", "WarpControlCli": "dogfood", "WarpManagedSecrets": "ga", "WarpPacks": "ga", @@ -288,7 +290,7 @@ "WebSearchUI": "ga", "WelcomeBlock": "other", "WelcomeTips": "other", - "WellKnownMcpIds": "dogfood", + "WellKnownMcpIds": "ga", "WithSandboxTelemetry": "other", "WorkflowAliases": "ga" }, @@ -680,6 +682,7 @@ "--no-computer-use", "--no-snapshot", "--open", + "--parent-run-id", "--profile", "--prompt", "--remove-all-secrets", @@ -699,7 +702,8 @@ "--snapshot-upload-timeout", "--sort-by", "--sort-order", - "--strict-mcp-startup" + "--strict-mcp-startup", + "--title" ], "api_key": [ "--agent", @@ -818,7 +822,7 @@ "DELETE /api/v1/factory/automations/{id}", "DELETE /api/v1/factory/automations/{id}/subscriptions/{subscription_id}", "DELETE /api/v1/factory/scorers/{scorer_id}", - "DELETE /api/v1/factory/scorers/{scorer_id}/autofix-config", + "DELETE /api/v1/factory/scorers/{scorer_id}/self-improvement-config", "DELETE /api/v1/factory/{uid}", "DELETE /api/v1/factory/{uid}/benchmarks/suites/{suite_uid}", "DELETE /api/v1/factory/{uid}/source", @@ -856,25 +860,39 @@ "GET /api/v1/agent/tasks", "GET /api/v1/agent/tasks/{id}", "GET /api/v1/factory", + "GET /api/v1/factory-alias/{alias}", + "GET /api/v1/factory-files/schemas", + "GET /api/v1/factory-files/schemas/{schema_version}", + "GET /api/v1/factory-files/schemas/{schema_version}/{document}", + "GET /api/v1/factory-setup/integrations/jira/projects", + "GET /api/v1/factory-setup/integrations/linear/teams", + "GET /api/v1/factory/access", "GET /api/v1/factory/automations", "GET /api/v1/factory/automations/events/{provider}", "GET /api/v1/factory/automations/{id}", "GET /api/v1/factory/runs/{run_id}/scores", "GET /api/v1/factory/scorers", - "GET /api/v1/factory/scorers/{scorer_id}/autofix-config", + "GET /api/v1/factory/scorers/{scorer_id}/metrics/pass-rate", "GET /api/v1/factory/scorers/{scorer_id}/results", "GET /api/v1/factory/scorers/{scorer_id}/results/reasons", + "GET /api/v1/factory/scorers/{scorer_id}/self-improvement-config", "GET /api/v1/factory/{uid}", "GET /api/v1/factory/{uid}/benchmarks/runs", "GET /api/v1/factory/{uid}/benchmarks/runs/{run_uid}", "GET /api/v1/factory/{uid}/benchmarks/runs/{run_uid}/results", "GET /api/v1/factory/{uid}/benchmarks/suites", "GET /api/v1/factory/{uid}/benchmarks/suites/{suite_uid}", + "GET /api/v1/factory/{uid}/gitlab-automation-capability", + "GET /api/v1/factory/{uid}/integration-activations", + "GET /api/v1/factory/{uid}/integration-destinations", "GET /api/v1/factory/{uid}/integrations/github/branches", "GET /api/v1/factory/{uid}/integrations/github/labels", "GET /api/v1/factory/{uid}/integrations/github/teams", "GET /api/v1/factory/{uid}/integrations/github/users", "GET /api/v1/factory/{uid}/integrations/github/workflows", + "GET /api/v1/factory/{uid}/integrations/jira/labels", + "GET /api/v1/factory/{uid}/integrations/jira/projects", + "GET /api/v1/factory/{uid}/integrations/jira/statuses", "GET /api/v1/factory/{uid}/integrations/linear/issues", "GET /api/v1/factory/{uid}/integrations/linear/projects", "GET /api/v1/factory/{uid}/integrations/linear/teams", @@ -883,10 +901,20 @@ "GET /api/v1/factory/{uid}/integrations/linear/workflow-states", "GET /api/v1/factory/{uid}/integrations/slack/conversations", "GET /api/v1/factory/{uid}/integrations/slack/users", + "GET /api/v1/factory/{uid}/merges/{merge_uid}", "GET /api/v1/factory/{uid}/metrics", + "GET /api/v1/factory/{uid}/metrics/cost-by-pr-size", + "GET /api/v1/factory/{uid}/metrics/run-breakdown", + "GET /api/v1/factory/{uid}/metrics/top-prs", + "GET /api/v1/factory/{uid}/review", "GET /api/v1/factory/{uid}/source", + "GET /api/v1/factory/{uid}/source/export", + "GET /api/v1/factory/{uid}/source/file", + "GET /api/v1/factory/{uid}/source/link-readiness", + "GET /api/v1/factory/{uid}/source/tree", "GET /api/v1/factory/{uid}/syncs", "GET /api/v1/factory/{uid}/task-by-conversation", + "GET /api/v1/factory/{uid}/task-by-run", "GET /api/v1/factory/{uid}/tasks", "GET /api/v1/factory/{uid}/tasks/{task_uid}", "GET /api/v1/harness-support/transcript", @@ -924,20 +952,24 @@ "POST /api/v1/agent/schedules/{id}/resume", "POST /api/v1/agent/tasks/{id}/cancel", "POST /api/v1/factory", - "POST /api/v1/factory/autofix/runs/{autofix_run_id}/file-tasks", - "POST /api/v1/factory/autofix/worker-results/{worker_result_id}/report", + "POST /api/v1/factory-files/validate", "POST /api/v1/factory/automations", "POST /api/v1/factory/avatar", "POST /api/v1/factory/run-scoring/dispatches", "POST /api/v1/factory/scorers", - "POST /api/v1/factory/scorers/{scorer_id}/pause", - "POST /api/v1/factory/scorers/{scorer_id}/resume", "POST /api/v1/factory/{uid}/apply", "POST /api/v1/factory/{uid}/benchmarks/runs/{run_uid}/cancel", "POST /api/v1/factory/{uid}/benchmarks/suites", "POST /api/v1/factory/{uid}/benchmarks/suites/{suite_uid}/runs", + "POST /api/v1/factory/{uid}/benchmarks/suites/{suite_uid}/tasks", + "POST /api/v1/factory/{uid}/gitlab-automation-capability/refresh", + "POST /api/v1/factory/{uid}/merges", + "POST /api/v1/factory/{uid}/merges/check", "POST /api/v1/factory/{uid}/plan", + "POST /api/v1/factory/{uid}/review/refine", + "POST /api/v1/factory/{uid}/source/clone-url", "POST /api/v1/factory/{uid}/tasks", + "POST /api/v1/factory/{uid}/tasks/{task_uid}/cancel", "POST /api/v1/harness-support/block-snapshot", "POST /api/v1/harness-support/commit-snapshot", "POST /api/v1/harness-support/external-conversation", @@ -961,9 +993,10 @@ "PUT /api/v1/factory/automations/{id}", "PUT /api/v1/factory/automations/{id}/subscriptions", "PUT /api/v1/factory/automations/{id}/subscriptions/{subscription_id}", - "PUT /api/v1/factory/scorers/{scorer_id}/autofix-config", + "PUT /api/v1/factory/scorers/{scorer_id}/self-improvement-config", "PUT /api/v1/factory/{uid}/integrations/linear/teams/{team_id}/labels", "PUT /api/v1/factory/{uid}/source", + "PUT /api/v1/factory/{uid}/source/files", "PUT /api/v1/memory_stores/{uid}", "PUT /api/v1/memory_stores/{uid}/memories/{memoryUid}" ], @@ -1365,6 +1398,7 @@ "claude-api": "bundled", "create-skill": "bundled", "create-tab-config": "bundled", + "factory-files": "bundled", "factory-mcp": "bundled", "modify-settings": "bundled", "oz-platform": "bundled", @@ -1377,5 +1411,5 @@ "verify-ui-change-in-cloud": "dogfood", "warpctrl": "bundled" }, - "changelog_last_version": "2026.08.07" + "changelog_last_version": "2026.08.13" } diff --git a/.agents/skills/style_lint/style_lint.py b/.agents/skills/style_lint/style_lint.py index 014dad031..5ffb579ee 100644 --- a/.agents/skills/style_lint/style_lint.py +++ b/.agents/skills/style_lint/style_lint.py @@ -40,6 +40,9 @@ "Oz CLI", "Oz Platform", "Project Rules", "Slash Commands", "Terminal Mode", "Universal Input", "Warp Drive", "Warp Platform", "Automation Platform", "Warp Factories", "Factory MCP", + "Computer Use", "Full Terminal Use", "Zero Data Retention", "Single Sign-On", + "Blocks", "Block", "Tab Configs", "Tab Config", + "Launch Configuration", "Launch Configurations", } # Terminology: wrong → right (case-sensitive checks) @@ -523,6 +526,24 @@ def check_ui_element_backticks(lines: List[str], filepath: str) -> List[Issue]: return issues +# Marks the end of a rendered sentence within a single header/line: a +# `.`/`!`/`?`, optionally followed by a closing quote or bracket. A header can +# legitimately contain more than one sentence (e.g. a two-question FAQ title +# or a comment-hidden boundary), and only the very first word of *each* +# sentence is sentence-initial -- not just the first word of the whole line. +_SENTENCE_END_RE = re.compile(r'[.!?]["\')\]]*$') + + +def _sentence_start_indices(words: List[str]) -> set: + """Return word indices that start a sentence: index 0, plus any word + immediately following another word ending in `.`, `!`, or `?`.""" + starts = {0} + for idx in range(1, len(words)): + if _SENTENCE_END_RE.search(words[idx - 1]): + starts.add(idx) + return starts + + def _to_sentence_case(text: str) -> str: """Convert header text to sentence case, preserving proper feature names and acronyms.""" skip_words = {"I", "A", "API", "CLI", "SDK", "SSH", "UI", "URL", "PR", "CI", "CD"} @@ -538,9 +559,11 @@ def _to_sentence_case(text: str) -> str: for j in range(len(fn_words)): protected[start + j] = True + sentence_starts = _sentence_start_indices(words) + result = [] for idx, w in enumerate(words): - if idx == 0 or protected[idx]: + if idx in sentence_starts or protected[idx]: result.append(w) continue clean = re.sub(r"[^a-zA-Z]", "", w) @@ -569,10 +592,16 @@ def check_header_case(lines: List[str], filepath: str) -> List[Issue]: words = text.split() if len(words) < 2: continue - # Count capitalized non-first words (excluding proper feature names, short words) + # Count capitalized non-first words (excluding proper feature names, + # short words, and the first word of any later sentence in the same + # header -- a header can contain more than one sentence, e.g. a + # two-question FAQ title, and each one gets its own capitalized start). skip_words = {"I", "A", "API", "CLI", "SDK", "SSH", "UI", "URL", "PR", "CI", "CD"} + sentence_starts = _sentence_start_indices(words) title_case_count = 0 - for w in words[1:]: + for idx, w in enumerate(words): + if idx in sentence_starts: + continue clean = re.sub(r"[^a-zA-Z]", "", w) if not clean or clean in skip_words or len(clean) <= 2: continue @@ -1244,11 +1273,16 @@ def check_factory_proper_noun(lines: List[str], filepath: str) -> List[Issue]: continue if any(phrase in line for phrase in FACTORY_ALLOWED_PHRASES): continue - # Strip inline code, link targets, and HTML/JSX attributes: a slug like - # `/factories/factory-as-code/` or an `alt="..."` value is not prose. + # Strip inline code, link targets, HTML/JSX attributes, and JSX/MDX + # comments: a slug like `/factories/factory-as-code/` or an + # `alt="..."` value is not prose, and a `{/* ... */}` comment renders + # to nothing, so the text right after one is not mid-sentence just + # because the raw source has no space/punctuation there -- the actual + # sentence boundary can be hidden inside the stripped comment. prose = re.sub(r"`[^`]*`", "", line) prose = re.sub(r"\]\([^)]*\)", "]", prose) prose = re.sub(r'\w+="[^"]*"', "", prose) + prose = re.sub(r"\{/\*.*?\*/\}", "", prose) for m in FACTORY_BARE.finditer(prose): before = prose[:m.start()] after = prose[m.end():] diff --git a/.agents/skills/style_lint/test_factory_proper_noun.py b/.agents/skills/style_lint/test_factory_proper_noun.py index 43fab69be..cbdf4db71 100644 --- a/.agents/skills/style_lint/test_factory_proper_noun.py +++ b/.agents/skills/style_lint/test_factory_proper_noun.py @@ -37,6 +37,8 @@ "definite article plus a capital"), ("Review the Factory metrics before deciding.", True, "mid-sentence attributive use of the banned form"), + ("Review the {/* internal */} Factory metrics before deciding.", True, + "mid-sentence even with an adjacent stripped JSX/MDX comment"), # --- the product name, written correctly --- ("Warp Factories is in Early Access.", False, "the product name"), ("Connect Warp Factories to your repository.", False, "product name mid-sentence"), @@ -50,6 +52,8 @@ ("| **Factory definition** | The definition files |", False, "table-cell-initial"), ("The tab is read-only. Factory owners can still edit it.", False, "initial after a sentence boundary"), + ("Verify before merging. {/* internal reviewer note, strips to nothing */}Factory definitions sync the same way.", False, + "sentence-initial after a stripped JSX/MDX comment"), # --- sanctioned exceptions --- ("Send work through the Factory MCP.", False, "Factory MCP is the shipped feature name"), ("Enter a **Factory name**, such as `Payments`.", False, "verbatim UI field label"), diff --git a/.agents/skills/style_lint/test_header_case_sentence_boundary.py b/.agents/skills/style_lint/test_header_case_sentence_boundary.py new file mode 100644 index 000000000..357f66b75 --- /dev/null +++ b/.agents/skills/style_lint/test_header_case_sentence_boundary.py @@ -0,0 +1,76 @@ +#!/usr/bin/env python3 +"""Regression cases for check_header_case's sentence-boundary handling. + +A header is normally sentence case: only the very first word is capitalized. +But a header can legitimately contain more than one rendered sentence (a +two-question FAQ title, for example), and each sentence gets its own +capitalized first word. Before this test existed, `check_header_case` and +`_to_sentence_case` only ever protected word index 0, so a rework on PR #583 +found this had silently lowercased the second sentence's leading word in a +two-question FAQ heading ("...yet. How does billing work?" -> "...yet. how +does billing work?"). Run this after touching `_to_sentence_case`, +`check_header_case`, or `_sentence_start_indices`. +""" +import importlib.util +import pathlib +import sys + +HERE = pathlib.Path(__file__).parent +spec = importlib.util.spec_from_file_location("style_lint", HERE / "style_lint.py") +style_lint = importlib.util.module_from_spec(spec) +spec.loader.exec_module(style_lint) + +# (header text without the leading '#'s, should_flag, description) +CASES = [ + ("Enabling Computer Use", False, + "single sentence, fully protected proper feature name"), + ("My co-workers are using Warp but were not on a Team Together yet. How does billing work?", True, + "two-sentence FAQ title; genuine Title Case words (Team, Together) in the first sentence trigger the fix"), + ("Is Warp Fully Free? No it Requires a plan", True, + "second sentence starts right after a question mark, with a genuine mid-sentence Title Case word (Requires) later in that sentence"), +] + +# (header text, expected fixed text) -- the fix must lowercase genuine +# mid-sentence Title Case words while preserving the capital that starts the +# second sentence. +FIX_CASES = [ + ( + "My co-workers are using Warp but were not on a Team Together yet. How does billing work?", + "My co-workers are using warp but were not on a team together yet. How does billing work?", + ), + ( + "Is Warp Fully Free? No it Requires a plan", + "Is warp fully free? No it requires a plan", + ), +] + + +def main() -> int: + failures = 0 + for text, should_flag, description in CASES: + line = f"## {text}" + issues = style_lint.check_header_case([line], "test.mdx") + flagged = bool(issues) + ok = flagged == should_flag + if not ok: + failures += 1 + print(f" [{'PASS' if ok else 'FAIL'}] {description:<90} flagged={flagged}") + + for text, expected_fixed in FIX_CASES: + fixed = style_lint._to_sentence_case(text) + ok = fixed == expected_fixed + if not ok: + failures += 1 + print(f" [{'PASS' if ok else 'FAIL'}] fix preserves the second sentence's capital: {fixed!r}") + + total = len(CASES) + len(FIX_CASES) + print() + if failures: + print(f"{failures} of {total} cases regressed.") + return 1 + print(f"All {total} cases behave correctly.") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/content/docs/agents/capabilities/computer-use/testing-and-recordings.mdx b/src/content/docs/agents/capabilities/computer-use/testing-and-recordings.mdx index 6155e2b41..eda8dd70c 100644 --- a/src/content/docs/agents/capabilities/computer-use/testing-and-recordings.mdx +++ b/src/content/docs/agents/capabilities/computer-use/testing-and-recordings.mdx @@ -85,7 +85,7 @@ An agent walks through a critical user journey, such as the "New run" creation f Example prompt: ```text -Build the Oz web app and walk through the entire "New run" creation flow end to end. Exercise every entrypoint into the flow: the primary New run button, the command palette, and any contextual entrypoints. Then step through each stage from opening the New run surface to submitting a run. +Build the Oz web app and walk through the entire "New run" creation flow end to end. Exercise every entrypoint into the flow: the primary New run button, the Command Palette, and any contextual entrypoints. Then step through each stage from opening the New run surface to submitting a run. ``` This gives you a reproducible, time-stamped clip of the flow that can be archived, diffed across releases, or shared with the team as a baseline. diff --git a/src/content/docs/agents/cli/input-and-shell-commands.mdx b/src/content/docs/agents/cli/input-and-shell-commands.mdx index eb256a607..0121bc587 100644 --- a/src/content/docs/agents/cli/input-and-shell-commands.mdx +++ b/src/content/docs/agents/cli/input-and-shell-commands.mdx @@ -41,7 +41,7 @@ The [slash commands reference](/agents/cli/reference/#slash-commands) lists ever Press `↑` with the cursor on the first row of the input to open the history menu. -* **What's listed** - In agent mode, the menu combines your previous prompts and shell commands in one list, with commands marked by a `!` prefix. In [shell mode](#shell-mode), the menu lists commands only. +* **What's listed** - In Agent Mode, the menu combines your previous prompts and shell commands in one list, with commands marked by a `!` prefix. In [shell mode](#shell-mode), the menu lists commands only. * **Preview** - Moving the selection previews each entry in the input and switches the input to the matching mode: recalled commands run as shell commands, and recalled prompts go to the agent. * **Submit** - `Enter` runs the selection immediately. It doesn't insert it for editing. * **Dismiss** - `Esc` restores what you had typed. Pressing `↓` past the newest entry does the same. @@ -71,7 +71,7 @@ Attach images to a prompt so the agent can analyze them: * **Paste an image** - Copy an image to your clipboard and press `Ctrl+V`. * **Paste or drop a file path** - Paste the path to an image file, or drag the file onto your terminal window to insert its path. Absolute paths, paths relative to the working directory, and `~` paths all resolve. -Supported formats are PNG, JPEG, GIF, and WebP. Attaching an image locks the input to agent mode, since images are sent to the agent rather than the shell. +Supported formats are PNG, JPEG, GIF, and WebP. Attaching an image locks the input to Agent Mode, since images are sent to the agent rather than the shell. Attached images appear in an attachment bar above the input. Press `Tab` to focus the bar, `Backspace` to remove the selected attachment, and `Esc` to return to the input. @@ -95,14 +95,14 @@ Voice input in the CLI uses the same transcription service as the Warp app. See The CLI shows its shortcuts in context, so you rarely need to memorize them: * **Placeholder hints** - An empty input shows the key triggers for the current mode. -* **Shortcuts menu** - Type `?` in an empty input to open a shortcuts overview. Its contents adapt to what you're doing: agent mode lists the menu triggers and input history, shell mode shows how to return to agent mode, and extra sections appear during multi-agent sessions or agent-controlled terminal use. Press `Esc`, or start typing, to close it. +* **Shortcuts menu** - Type `?` in an empty input to open a shortcuts overview. Its contents adapt to what you're doing: Agent Mode lists the menu triggers and input history, shell mode shows how to return to Agent Mode, and extra sections appear during multi-agent sessions or agent-controlled terminal use. Press `Esc`, or start typing, to close it. ## Shell mode The input is agent-first: by default, pressing `Enter` sends your text to the agent as a prompt. Use shell mode to run a command instead: 1. Press `!` at the start of the input. The prompt marker changes from `>` to `!`, and the statusline below the input shows **Shell mode**. -2. Run a command. The input returns to agent mode afterward. +2. Run a command. The input returns to Agent Mode afterward. To leave shell mode without running a command, press `Esc`, or press `Backspace` at the start of the input. Any text you typed stays in the input. @@ -118,9 +118,9 @@ Out of the box, the CLI never guesses what your input is: everything goes to the * **Toggle detection** - Run `/natural-language-detection` to turn detection on or off. The statusline confirms the change, and the setting persists across sessions. * **Automatic classification** - With detection on, the CLI classifies your input as you type. When the input looks like a shell command (for example, `git status`), the input switches to shell mode, and `Enter` runs it as a command. Everything else is sent to the agent. -* **Ambiguous input** - Short or ambiguous input stays in agent mode, and a single word switches to shell mode only when it matches a command available in your shell. +* **Ambiguous input** - Short or ambiguous input stays in Agent Mode, and a single word switches to shell mode only when it matches a command available in your shell. -The prompt marker and statusline always show the current mode before you press `Enter`. If detection classifies input differently than you intended, press `Esc` to switch back to agent mode, or press `!` at the start of the input to force shell mode. +The prompt marker and statusline always show the current mode before you press `Enter`. If detection classifies input differently than you intended, press `Esc` to switch back to Agent Mode, or press `!` at the start of the input to force shell mode. ## Long-running and interactive commands diff --git a/src/content/docs/agents/cli/quickstart.mdx b/src/content/docs/agents/cli/quickstart.mdx index 5a8846e70..13b369e84 100644 --- a/src/content/docs/agents/cli/quickstart.mdx +++ b/src/content/docs/agents/cli/quickstart.mdx @@ -97,7 +97,7 @@ You can run shell commands directly without leaving the CLI. Type `!` at the start of an empty input to switch to shell mode. The footer shows **Shell mode**. Type a command, such as `git status`, and press `Enter`. To go back to prompting the agent, press `Backspace` on the empty input. -To run recognized shell commands without the `!` prefix, run `/natural-language-detection` to turn on natural language detection. The CLI then classifies input as you type: recognized commands switch to shell mode, while natural-language prompts stay in agent mode. The prompt marker and statusline show the active mode before you press `Enter`. +To run recognized shell commands without the `!` prefix, run `/natural-language-detection` to turn on natural language detection. The CLI then classifies input as you type: recognized commands switch to shell mode, while natural-language prompts stay in Agent Mode. The prompt marker and statusline show the active mode before you press `Enter`. See [Input and shell commands](/agents/cli/input-and-shell-commands/) for long-running commands, interactive programs, and full-screen apps. diff --git a/src/content/docs/agents/cli/reference.mdx b/src/content/docs/agents/cli/reference.mdx index 752efe138..90626fc26 100644 --- a/src/content/docs/agents/cli/reference.mdx +++ b/src/content/docs/agents/cli/reference.mdx @@ -137,7 +137,7 @@ Type `/` at the start of the input to open the slash command menu. Commands that | `/logout` | | Log out of Warp | | `/manage-billing` | | Open your team's billing page in the browser | | `/mcp` | | View and manage MCP servers | -| `/model` | | Switch the base agent model | +| `/model` | | Switch the base Agent Model | | `/natural-language-detection` | | Toggle natural language detection for shell input | | `/new` | `[prompt]` | Start a new conversation (alias for `/agent`) | | `/orchestrate` | `[task]` | Break a task into subtasks and run them in parallel with multiple agents. See [multi-agent orchestration](/agents/cli/cloud-and-orchestration/#multi-agent-orchestration) | diff --git a/src/content/docs/enterprise/enterprise-features/byollm-aws-bedrock.mdx b/src/content/docs/enterprise/enterprise-features/byollm-aws-bedrock.mdx index b285f4b23..5d86393df 100644 --- a/src/content/docs/enterprise/enterprise-features/byollm-aws-bedrock.mdx +++ b/src/content/docs/enterprise/enterprise-features/byollm-aws-bedrock.mdx @@ -302,7 +302,7 @@ See [The three credit buckets](/support-and-community/plans-and-billing/platform * **Per-user authentication** — Each team member authenticates individually; credentials are not shared. * **No storage or logging** — Warp never stores or logs your cloud session tokens on its servers. -### Zero Data Retention (ZDR) +## Zero Data Retention (ZDR) Warp maintains **SOC 2 compliance** and has **Zero Data Retention (ZDR)** agreements with its contracted LLM providers. diff --git a/src/content/docs/enterprise/enterprise-features/team-managed-keys-and-endpoints.mdx b/src/content/docs/enterprise/enterprise-features/team-managed-keys-and-endpoints.mdx index acc804e2e..0c5417c2f 100644 --- a/src/content/docs/enterprise/enterprise-features/team-managed-keys-and-endpoints.mdx +++ b/src/content/docs/enterprise/enterprise-features/team-managed-keys-and-endpoints.mdx @@ -118,7 +118,7 @@ See [The three credit buckets](/support-and-community/plans-and-billing/platform * **Never synced to devices** - Only display metadata syncs to member clients. API keys, endpoint base URLs, and ciphertext are never sent to clients. * **Never delivered to cloud agent environments** - Team credentials are decrypted only at the server-side inference boundary and never reach a cloud agent's worker or environment. -### Zero Data Retention (ZDR) +## Zero Data Retention (ZDR) Warp is **SOC 2 compliant** and has **Zero Data Retention (ZDR)** agreements with its contracted LLM providers. When you route through your own keys or endpoints: diff --git a/src/content/docs/enterprise/getting-started/getting-started-developers.mdx b/src/content/docs/enterprise/getting-started/getting-started-developers.mdx index f434a7084..5b3a50e79 100644 --- a/src/content/docs/enterprise/getting-started/getting-started-developers.mdx +++ b/src/content/docs/enterprise/getting-started/getting-started-developers.mdx @@ -181,7 +181,7 @@ Warp Drive is your workspace for saving and sharing Workflows, Notebooks, Prompt Your team admin may have already created shared resources. Explore the Team section of Warp Drive to see what's available—including onboarding notebooks, deployment workflows, and coding standards rules. -### MCP (Model Context Protocol) +## MCP (Model Context Protocol) MCP connects Warp's agents to external tools and services for enhanced context. diff --git a/src/content/docs/enterprise/index.mdx b/src/content/docs/enterprise/index.mdx index c2945eebf..66fb05868 100644 --- a/src/content/docs/enterprise/index.mdx +++ b/src/content/docs/enterprise/index.mdx @@ -10,7 +10,7 @@ Warp Enterprise is built for organizations that want to accelerate software deve Warp has three products: -* **Warp Terminal** - A modern terminal designed for agentic development where developers run commands, collaborate with agents, and orchestrate autonomous work from the command line. +* **Warp** - A modern terminal designed for agentic development where developers run commands, collaborate with agents, and orchestrate autonomous work from the command line. * **{VARS.WARP_AUTOMATION_PLATFORM}** - Warp's programmable system for running and coordinating agents at scale. The {VARS.WARP_AUTOMATION_PLATFORM} powers all agents in Warp, whether they run locally or in the cloud, and provides the orchestration, tracking, and control plane for scalable agent workflows. * [**Warp Factories**](/factories/) - Warp's product for building and operating software factories, where cloud agents triage, spec, implement, review, and verify work, and humans approve key decisions. diff --git a/src/content/docs/enterprise/security-and-compliance/security-overview.mdx b/src/content/docs/enterprise/security-and-compliance/security-overview.mdx index eb531dd0c..e7d89c791 100644 --- a/src/content/docs/enterprise/security-and-compliance/security-overview.mdx +++ b/src/content/docs/enterprise/security-and-compliance/security-overview.mdx @@ -21,7 +21,7 @@ Warp's security philosophy centers on **transparency and developer control**: ## What telemetry does Warp collect and why? -### Zero Data Retention (ZDR) +## Zero Data Retention (ZDR) Warp has **Zero Data Retention (ZDR)** agreements with its contracted LLM providers (Anthropic, OpenAI, Google), meaning they do not store or train on your data. ZDR applies across all Warp plans. @@ -167,7 +167,7 @@ Security-relevant controls include: ## Security features for developers -### Bring Your Own LLM (BYOLLM) +### Bring your own LLM (BYOLLM) Route agent inference through your own cloud infrastructure for complete control: diff --git a/src/content/docs/guides/agent-workflows/how-to-review-prs-like-a-senior-dev.mdx b/src/content/docs/guides/agent-workflows/how-to-review-prs-like-a-senior-dev.mdx index 038bdc03f..2434d7ce5 100644 --- a/src/content/docs/guides/agent-workflows/how-to-review-prs-like-a-senior-dev.mdx +++ b/src/content/docs/guides/agent-workflows/how-to-review-prs-like-a-senior-dev.mdx @@ -91,7 +91,7 @@ If you want the agent's findings pre-formatted for rapid scanning, useful for as ``` Review this pull request and format your response for rapid scanning. Follow the structure below. -### 1. Risk Assessment +### 1. Risk assessment **Overall Risk:** HIGH | MEDIUM | LOW **Complexity:** [Simple | Moderate | Complex | Very Complex] @@ -100,7 +100,7 @@ Review this pull request and format your response for rapid scanning. Follow the --- -### 2. Critical Issues +### 2. Critical issues _If none, write "None found."_ #### 1. [ISSUE TITLE] diff --git a/src/content/docs/guides/agent-workflows/understanding-your-codebase.mdx b/src/content/docs/guides/agent-workflows/understanding-your-codebase.mdx index ac41a013c..bc66ce9e5 100644 --- a/src/content/docs/guides/agent-workflows/understanding-your-codebase.mdx +++ b/src/content/docs/guides/agent-workflows/understanding-your-codebase.mdx @@ -38,7 +38,7 @@ This prompt tells Warp to: --- -### 3. Real example: Block Sharing +### 3. Real example: block sharing Kevin types `block sharing` into Warp’s shared workflow.\ Warp: diff --git a/src/content/docs/guides/build-an-app-in-warp/building-warps-input-with-warp.mdx b/src/content/docs/guides/build-an-app-in-warp/building-warps-input-with-warp.mdx index 6bf2c01d7..24cbb664a 100644 --- a/src/content/docs/guides/build-an-app-in-warp/building-warps-input-with-warp.mdx +++ b/src/content/docs/guides/build-an-app-in-warp/building-warps-input-with-warp.mdx @@ -28,7 +28,7 @@ Most people were excited, but engineering resources were stretched thin — focu So I thought: _“What if I just Warp it?”_ -#### 1. Locating the Git Diff chip code +#### 1. Locating the Git diff chip code Inside the universal input, there’s a small Git Diff chip — it shows your current branch and open changes. It was one pixel too tall. That tiny visual bug drove me nuts, so I used Warp to find where it lived. diff --git a/src/content/docs/guides/configuration/how-to-create-project-rules-for-an-existing-project-astro-typescript-tailwind.mdx b/src/content/docs/guides/configuration/how-to-create-project-rules-for-an-existing-project-astro-typescript-tailwind.mdx index 2ef3cd46e..1378473cc 100644 --- a/src/content/docs/guides/configuration/how-to-create-project-rules-for-an-existing-project-astro-typescript-tailwind.mdx +++ b/src/content/docs/guides/configuration/how-to-create-project-rules-for-an-existing-project-astro-typescript-tailwind.mdx @@ -70,7 +70,7 @@ Share Your Brewfiles is an Astro-based website that allows developers to share a * `exchangeCodeForAccessToken.ts` - GitHub OAuth token exchange * `logSearch.json.ts` - Analytics for search functionality -### Core Library Functions (`src/lib/`) +### Core library functions (`src/lib/`) * `generatePersonality.ts` - Complex algorithm that analyzes brewfile packages and assigns personality types (15 different personalities) * `personalityBuckets.ts` - Defines personality type metadata and descriptions * `validateBrewfileData.ts` - Data validation for brewfile uploads @@ -124,7 +124,7 @@ curl "http://localhost:4321/api/getRankedPackages.json" ## Architecture Notes -### Personality Generation System +### Personality generation system The core feature analyzes brewfile packages against a curated dictionary (`labelledBrewfiles.ts`) that categorizes packages by: - Developer type (Backend, Frontend, DevOps, Security, Data, General) - Package characteristics (AI tools, organization tools, customization, popularity rank) @@ -138,7 +138,7 @@ The system calculates percentage distributions and applies complex rules to assi - Real-time personality generation happens asynchronously after uploads - GitHub OAuth integration for user authentication -### Path Alias System +### Path alias system Uses TypeScript path mapping with `@/*` pointing to `./src/*` for clean imports. ### Astro Configuration @@ -147,27 +147,27 @@ Uses TypeScript path mapping with `@/*` pointing to `./src/*` for clean imports. - Sitemap generation for SEO - Prefetch enabled for performance -## Development Environment Setup +## Development environment setup ### Prerequisites - Node.js (version compatible with Astro 4) - Access to Firebase project (config is in source but consider security implications) - GitHub OAuth app for testing upload functionality -### Local Development Notes +### Local development notes - The site uses server-side rendering so API routes work in development - Firebase config is currently in source code - be aware of security implications - GitHub OAuth integration requires valid access tokens for uploads - Personality generation is computationally expensive with large datasets -### Custom Tailwind Configuration +### Custom Tailwind configuration - Dark theme with custom color palette (`bkg: #111111`) - Custom accent colors (teal, orange, green, pink, blue variants) - Marquee animations for scrolling elements - Responsive typography with fluid scaling - Container queries support -## File Structure Navigation +## File structure navigation - src/ - pages/ @@ -182,20 +182,20 @@ Uses TypeScript path mapping with `@/*` pointing to `./src/*` for clean imports. - firebase/ Firebase configuration -## Common Development Tasks +## Common development tasks -### Adding New Personality Types +### Adding new personality types 1. Update `DeveloperPersonalityType` enum in `src/types/personality.ts` 2. Add detection function in `src/lib/generatePersonality.ts` 3. Update `personalityBuckets.ts` with new personality metadata 4. Add corresponding image to `public/images/` -### Modifying Package Analysis +### Modifying package analysis - Update `labelledBrewfiles.ts` to modify package categorization - Adjust percentage thresholds in personality detection functions - Test with different brewfile compositions -### API Route Development +### API route development - All routes in `src/pages/api/` become serverless functions on Vercel - Use `export const prerender = false;` for dynamic routes - Handle errors consistently with try/catch blocks diff --git a/src/content/docs/guides/configuration/how-to-set-up-self-serve-data-analytics-with-skills.mdx b/src/content/docs/guides/configuration/how-to-set-up-self-serve-data-analytics-with-skills.mdx index 75407b869..0fc27420a 100644 --- a/src/content/docs/guides/configuration/how-to-set-up-self-serve-data-analytics-with-skills.mdx +++ b/src/content/docs/guides/configuration/how-to-set-up-self-serve-data-analytics-with-skills.mdx @@ -27,7 +27,7 @@ In this 40-minute livestream, Warp's data team demonstrates the workflow end-to- -## 1. Install the two Skills +## 1. Install the two skills Warp automatically discovers any Skill stored under `.agents/skills/` in your repo, so committing the two directories makes them available to every teammate's Agent runs. Clone the public [warpdotdev/oz-skills](https://github.com/warpdotdev/oz-skills) repo and copy the two Skill directories into your own dbt repo: diff --git a/src/content/docs/guides/external-tools/github-mcp-summarizing-open-prs-and-creating-gh-issues.mdx b/src/content/docs/guides/external-tools/github-mcp-summarizing-open-prs-and-creating-gh-issues.mdx index 45178c69f..c27e2ef2b 100644 --- a/src/content/docs/guides/external-tools/github-mcp-summarizing-open-prs-and-creating-gh-issues.mdx +++ b/src/content/docs/guides/external-tools/github-mcp-summarizing-open-prs-and-creating-gh-issues.mdx @@ -38,7 +38,7 @@ The GitHub MCP Server lets Warp agents read, write, and automate tasks in your G --- -### Step 3. Workflow 1 — Summarize all open PRs +### Step 3. Workflow 1 — summarize all open PRs Use Warp’s agent to summarize pull requests: @@ -52,7 +52,7 @@ Perfect for daily PR triage or stand-ups. --- -### Step 4. Workflow 2 — Create GitHub issues from TODOs +### Step 4. Workflow 2 — create GitHub issues from TODOs Use a saved prompt to automate issue creation. diff --git a/src/content/docs/platform/integrations/bitbucket.mdx b/src/content/docs/platform/integrations/bitbucket.mdx index 3e2c47da4..906376ce2 100644 --- a/src/content/docs/platform/integrations/bitbucket.mdx +++ b/src/content/docs/platform/integrations/bitbucket.mdx @@ -111,7 +111,7 @@ Setup commands run on a fresh container for every agent run. Write them to be id --- -## Bitbucket Data Center / Server +## Bitbucket data center / server ### Step 1: Generate an HTTP access token diff --git a/src/content/docs/platform/integrations/cloud-providers.mdx b/src/content/docs/platform/integrations/cloud-providers.mdx index 5a7ae511a..f328a6e27 100644 --- a/src/content/docs/platform/integrations/cloud-providers.mdx +++ b/src/content/docs/platform/integrations/cloud-providers.mdx @@ -151,7 +151,7 @@ AWS authentication mechanism. The following environment variables are set while ## GCP -### Step 1: Create a Workload Identity Pool and Provider +### Step 1: Create a workload identity pool and provider The {VARS.WARP_AUTOMATION_PLATFORM} GCP integration uses [Workload Identity Federation](https://docs.cloud.google.com/iam/docs/workload-identity-federation). You will need to configure a pool and provider to trust OIDC tokens produced by the {VARS.WARP_AUTOMATION_PLATFORM}. @@ -209,7 +209,7 @@ gcloud projects add-iam-policy-binding \ See [Workload Identity Federation principal types](https://docs.cloud.google.com/iam/docs/workload-identity-federation#principal-types) for the full syntax supported. -### Step 3: Enable Workload Identity Federation in your cloud agent environment +### Step 3: Enable workload identity federation in your cloud agent environment Finally, configure the cloud agent environment to use your Workload Identity Federation provider. diff --git a/src/content/docs/platform/self-hosting/managed-direct.mdx b/src/content/docs/platform/self-hosting/managed-direct.mdx index a2cef140a..722ffd823 100644 --- a/src/content/docs/platform/self-hosting/managed-direct.mdx +++ b/src/content/docs/platform/self-hosting/managed-direct.mdx @@ -54,7 +54,7 @@ Export the API key so the worker can authenticate to the {VARS.WARP_AUTOMATION_P export WARP_API_KEY="your_agent_api_key" ``` -### 2. Start the worker with the Direct backend +### 2. Start the worker with the direct backend Pass `--backend direct`: diff --git a/src/content/docs/platform/self-hosting/managed-kubernetes.mdx b/src/content/docs/platform/self-hosting/managed-kubernetes.mdx index f13bb13b3..05bd65cdd 100644 --- a/src/content/docs/platform/self-hosting/managed-kubernetes.mdx +++ b/src/content/docs/platform/self-hosting/managed-kubernetes.mdx @@ -69,7 +69,7 @@ Create the namespace if it doesn't exist: kubectl create namespace warp-oz ``` -### 2. Create the API key Secret +### 2. Create the API key secret If you're not using an existing Secret, create one with the API key: diff --git a/src/content/docs/reference/cli/mcp-servers.mdx b/src/content/docs/reference/cli/mcp-servers.mdx index f38fc2dfc..a753446ca 100644 --- a/src/content/docs/reference/cli/mcp-servers.mdx +++ b/src/content/docs/reference/cli/mcp-servers.mdx @@ -2,7 +2,7 @@ title: MCP servers (CLI reference) description: >- Connect agents to external tools like GitHub, Linear, and Sentry by passing - MCP servers to the --mcp flag as a UUID, inline JSON, or file path. + MCP servers to the --mcp flag as a UUID, well-known id, inline JSON, or file path. sidebar: label: "MCP servers" --- @@ -20,9 +20,10 @@ For help choosing between local, cloud, and shared MCP workflows, see [Connect d ## Using the `--mcp` flag -The `--mcp` flag accepts three formats: +The `--mcp` flag accepts four formats: * **UUID** — reference a Warp-shared MCP server by its UUID (find UUIDs with `oz mcp list`) +* **Well-known id** — a short identifier like `linear`, resolved server-side against a set of managed MCP servers * **Inline JSON** — pass a full MCP JSON configuration directly as a string * **File path** — path to a JSON file containing the MCP configuration @@ -58,6 +59,16 @@ $ oz mcp list $ oz agent run --mcp "1deb1b14-b6e5-4996-ae99-233b7555d2d0" --prompt "who last updated the README?" ``` +### Passing MCP servers by well-known id + +A bare identifier made up of letters, digits, `-`, or `_` — such as `linear` — is treated as a well-known managed MCP id rather than a UUID or JSON. Warp resolves it server-side at run setup, so you don't need to look up a UUID first: + +```sh +$ oz agent run --mcp linear --prompt "list my assigned issues" +``` + +The server owns the set of recognized well-known ids. An id it doesn't recognize is skipped at run setup rather than failing the run, so new managed servers can become available without a client update. + ### Passing MCP servers as inline JSON or a file You can pass MCP configuration inline or via a file: diff --git a/src/content/docs/support-and-community/community/open-source-licenses.mdx b/src/content/docs/support-and-community/community/open-source-licenses.mdx index f0a5c9b30..b594eb71f 100644 --- a/src/content/docs/support-and-community/community/open-source-licenses.mdx +++ b/src/content/docs/support-and-community/community/open-source-licenses.mdx @@ -1247,7 +1247,7 @@ sidebar: | Windows Terminal | MIT | | GitHub Desktop | MIT | -## Full License Text +## Full license text ```text Third-Party Licenses for Warp diff --git a/src/content/docs/support-and-community/plans-and-billing/pricing-faqs.mdx b/src/content/docs/support-and-community/plans-and-billing/pricing-faqs.mdx index adc2e4d8a..6705ad8de 100644 --- a/src/content/docs/support-and-community/plans-and-billing/pricing-faqs.mdx +++ b/src/content/docs/support-and-community/plans-and-billing/pricing-faqs.mdx @@ -75,7 +75,7 @@ Team members have access to your shared [Warp Drive](/knowledge-and-collaboratio * Create unlimited [Notebooks](/knowledge-and-collaboration/warp-drive/notebooks/) and [Workflows](/knowledge-and-collaboration/warp-drive/workflows/) in Warp Drive to organize and share knowledge across your team. * Use Unlimited [Session Sharing](/knowledge-and-collaboration/session-sharing/) to collaborate in real time through live, shared terminal sessions. -### My co-workers are using Warp but we’re not on a Team together yet. How does billing work? +### My co-workers are using Warp but we’re not on a team together yet. How does billing work? Individual users with either personal or work email domains may continue to use Warp independently without incurring billing. The benefit of joining together on a Warp Team is that you get access to a shared Team Drive and collaboration features. @@ -338,7 +338,7 @@ BYOK and custom inference endpoint support are available for individual users an On Business and Enterprise, local agent runs that use a custom inference endpoint still consume platform credits for Warp's platform infrastructure. See [platform credits](/support-and-community/plans-and-billing/platform-credits/). -### Does Warp support other model routers or "Bring Your Own LLM"? +### Does Warp support other model routers or "bring your own LLM"? On the Enterprise plan, Warp's [Bring Your Own LLM (BYOLLM)](/enterprise/enterprise-features/bring-your-own-llm/) lets you route inference through major cloud-provider Model-as-a-Service offerings. BYOLLM supports AWS Bedrock and [Gemini Enterprise (Vertex AI)](/enterprise/enterprise-features/byollm-gemini-enterprise/), with Azure Foundry coming soon. Warp still manages model support, routing, and orchestration, but inference runs in your cloud environment so you can maintain data locality, security controls, and existing cloud spend commitments. diff --git a/src/content/docs/support-and-community/privacy-and-security/privacy.mdx b/src/content/docs/support-and-community/privacy-and-security/privacy.mdx index 18910b0d6..6bbad39ca 100644 --- a/src/content/docs/support-and-community/privacy-and-security/privacy.mdx +++ b/src/content/docs/support-and-community/privacy-and-security/privacy.mdx @@ -82,9 +82,9 @@ If you're a [Team](/knowledge-and-collaboration/teams/) admin, the deletion flow | `AI Execution Profile: Removed From Denylist` | An item was removed from an AI execution profile denylist | | `AI Execution Profile: Setting Updated` | An AI execution profile setting was updated | | `AI Input Not Sent` | The AI input was not sent | -| `AI Suggested Rule Added` | Clicked the Add Suggested Rule button in the AI blocklist | +| `AI Suggested Rule Added` | Clicked the Add Suggested Rule button in the AI denylist | | `AI Suggested Rule Content Changed` | Content changed by the user in the suggested rule dialog | -| `AI Suggested Rule Edited` | Clicked the Edit Suggested Rule button in the AI blocklist | +| `AI Suggested Rule Edited` | Clicked the Edit Suggested Rule button in the AI denylist | | `AI.ProviderCredential.Changed` | A user added or removed a model-provider credential | | `AIAutonomy.AutoexecutedRequestedCommand` | Autoexecuted an Agent Mode requested command | | `AIAutonomy.ChangedAgentModeAskUserQuestionPermission` | Changed Agent Mode permission for asking user questions | @@ -102,7 +102,7 @@ If you're a [Team](/knowledge-and-collaboration/teams/) admin, the deletion flow | `Agent Mode Setup Banner Accepted` | Agent Mode setup banner accepted | | `Agent Mode Setup Banner Dismissed` | Agent Mode setup banner dismissed | | `Agent Mode Setup Project Scoped Rules Action` | User clicked a button in the Agent Mode setup project scoped rules step | -| `Agent Mode.Setup Codebase Context Action` | User clicked a button in the Agent Mode setup codebase context step | +| `Agent Mode.Setup Codebase Context Action` | User clicked a button in the Agent Mode setup Codebase Context step | | `Agent Predict` | Completed an Agent Predict prediction | | `Agent Toolbar Dismissed` | User dismissed the use-agent toolbar | | `AgentManagement.AgentTypeSelectorOpened` | User opened the agent type selector from agent management | @@ -114,9 +114,9 @@ If you're a [Team](/knowledge-and-collaboration/teams/) admin, the deletion flow | `AgentManagement.ConversationOpened` | User opened a conversation | | `AgentManagement.DetailsPanelContinueLocally` | User clicked Continue locally in the details panel | | `AgentManagement.DetailsViewed` | User clicked View details | -| `AgentManagement.DismissSetupGuide` | User dismissed the ambient agent setup guide | +| `AgentManagement.DismissSetupGuide` | User dismissed the cloud agent setup guide | | `AgentManagement.FilterChanged` | User changed a filter in the management view | -| `AgentManagement.OpenSetupGuide` | User opened the ambient agent setup guide | +| `AgentManagement.OpenSetupGuide` | User opened the cloud agent setup guide | | `AgentManagement.SessionLinkCopied` | User copied a session link | | `AgentManagement.SetupGuideDocsLink` | User clicked a docs URL in the setup guide | | `AgentManagement.SetupGuideStepCopy` | User copied a workflow step from the setup guide | @@ -144,21 +144,21 @@ If you're a [Team](/knowledge-and-collaboration/teams/) admin, the deletion flow | `AgentMode.Code.SuggestedEditAcceptClicked` | User selected Accept for a code diff suggestion in Agent Mode | | `AgentMode.Code.SuggestedEditReceived` | Agent Mode suggested a code edit | | `AgentMode.Code.SuggestedEditResolved` | Agent Mode pending code edit suggestion resolved | -| `AgentMode.CreatedAIBlock` | Created an AI block in agent mode | +| `AgentMode.CreatedAIBlock` | Created an AI block in Agent Mode | | `AgentMode.Error` | Received an error when getting Agent Mode response | | `AgentMode.ExecutedWarpDrivePrompt` | Executed a saved prompt. | | `AgentMode.ExitedShellProcess` | An agent-requested command caused the shell process to exit | | `AgentMode.FileGlob.Failed` | The file glob tool failed to complete | | `AgentMode.FileGlob.Succeeded` | The file glob tool completed successfully | -| `AgentMode.FullEmbedCodebaseContextSearch.Failed` | Failed to search full embed codebase context | -| `AgentMode.FullEmbedCodebaseContextSearch.Success` | Successfully searched full embed codebase context | +| `AgentMode.FullEmbedCodebaseContextSearch.Failed` | Failed to search full embed Codebase Context | +| `AgentMode.FullEmbedCodebaseContextSearch.Success` | Successfully searched full embed Codebase Context | | `AgentMode.Grep.Failed` | The grep tool failed to complete | | `AgentMode.Grep.Succeeded` | The grep tool completed successfully | | `AgentMode.MerkleTreeSnapshot.Diff.Failed` | Failed to diff merkle tree snapshot | | `AgentMode.MerkleTreeSnapshot.Diff.Success` | Successfully diffed merkle tree snapshot | | `AgentMode.MerkleTreeSnapshot.Rebuild.Failed` | Failed to rebuild merkle tree from snapshot | | `AgentMode.MerkleTreeSnapshot.Rebuild.Success` | Successfully rebuilt merkle tree from snapshot | -| `AgentMode.OpenedCitation` | Opened a citation that was surfaced in agent mode | +| `AgentMode.OpenedCitation` | Opened a citation that was surfaced in Agent Mode | | `AgentMode.Orchestration.AgentProposedConfig` | An agent-authored orchestration config snapshot first became visible to the user on a plan card | | `AgentMode.Orchestration.Entered` | Orchestration was activated in a conversation via /orchestrate or a run_agents confirmation card surfacing. Plan-card entries are tracked separately via AgentProposedConfig + PlanConfigApprovalToggled. | | `AgentMode.Orchestration.PillBarInteraction` | User interacted with the orchestration pill bar (switch, pin, open in pane/tab, stop, kill, etc.) | @@ -170,10 +170,10 @@ If you're a [Team](/knowledge-and-collaboration/teams/) admin, the deletion flow | `AgentMode.RequestRetrySucceeded` | Agent Mode request succeeded after retrying following an initial error | | `AgentMode.SetupCreateEnvironmentAction` | User clicked a button in the Agent Mode setup create environment step | | `AgentMode.SurfacedCitations` | Agent mode used and cited external sources that were used in its response | -| `AgentMode.SyncCodebaseContext.BuildTree.Failed` | Failed to build merkle tree for codebase context | -| `AgentMode.SyncCodebaseContext.BuildTree.Success` | Successfully built merkle tree for codebase context | -| `AgentMode.SyncCodebaseContext.Failed` | Failed to sync codebase context | -| `AgentMode.SyncCodebaseContext.Success` | Successfully synced codebase context | +| `AgentMode.SyncCodebaseContext.BuildTree.Failed` | Failed to build merkle tree for Codebase Context | +| `AgentMode.SyncCodebaseContext.BuildTree.Success` | Successfully built merkle tree for Codebase Context | +| `AgentMode.SyncCodebaseContext.Failed` | Failed to sync Codebase Context | +| `AgentMode.SyncCodebaseContext.Success` | Successfully synced Codebase Context | | `AgentMode.ToggleAutoDetectionSetting` | Toggled the setting that enables or disables natural language auto-detection in the input. | | `AgentNotification.Shown` | An agent notification was shown to the user (toast or mailbox) | | `AgentTip Clicked` | User clicked a link or action in an Agent Tip | @@ -191,7 +191,7 @@ If you're a [Team](/knowledge-and-collaboration/teams/) admin, the deletion flow | `AmbientAgent.ConcurrencyModal.Dismissed` | User dismissed the cloud agent capacity modal | | `AmbientAgent.ConcurrencyModal.Opened` | User opened the cloud agent capacity modal | | `AmbientAgent.ConcurrencyModal.UpgradeClicked` | User clicked the upgrade button in the cloud agent capacity modal | -| `AmbientAgent.DispatchFailed` | Ambient agent failed to dispatch or encountered an error | +| `AmbientAgent.DispatchFailed` | Cloud agent failed to dispatch or encountered an error | | `AmbientAgent.EnvironmentSettings.CreatedEnvironment` | User created a new environment | | `AmbientAgent.EnvironmentSettings.DeletedEnvironment` | User deleted an environment | | `AmbientAgent.EnvironmentSettings.Image.Suggested` | Docker image was suggested for an environment | @@ -234,7 +234,7 @@ If you're a [Team](/knowledge-and-collaboration/teams/) admin, the deletion flow | `CLI.Execute.Agent.List` | Listed agents from the Warp CLI | | `CLI.Execute.Agent.Profile.List` | Listed agent profiles from the Warp CLI | | `CLI.Execute.Agent.Run` | Ran an agent from the Warp CLI | -| `CLI.Execute.Agent.RunAmbient` | Ran an ambient agent from the Warp CLI | +| `CLI.Execute.Agent.RunAmbient` | Ran a cloud agent from the Warp CLI | | `CLI.Execute.Agent.Skills` | Listed agent skills from the Warp CLI | | `CLI.Execute.Agent.Update` | Updated an agent from the Warp CLI | | `CLI.Execute.ApiKey.Create` | Created an API key from the Warp CLI | @@ -346,8 +346,8 @@ If you're a [Team](/knowledge-and-collaboration/teams/) admin, the deletion flow | `CodexModal.Opened` | User opened the Codex modal | | `CodexModal.UseCodexClicked` | User clicked 'Use Codex' in the Codex modal | | `Command File Run` | Opened a .cmd or unix executable file and ran it directly in Warp | -| `Command Palette Search Accepted` | Accepted a command palette search result | -| `Command Palette Search Exited` | Exited command palette search without accepting a result | +| `Command Palette Search Accepted` | Accepted a Command Palette search result | +| `Command Palette Search Exited` | Exited Command Palette search without accepting a result | | `Command Search Exited` | Exited command search (universal search panel to search) without accepting a result | | `Command Search Opened` | Opened command search (universal search panel to search) | | `Command Search Result Accepted` | Accepted command search result | @@ -549,7 +549,7 @@ If you're a [Team](/knowledge-and-collaboration/teams/) admin, the deletion flow | `SSH Remote Server Choice Do Not Ask Again Toggled` | Toggled the 'Don't ask me this again' checkbox on the SSH remote-server choice block | | `Save Launch Config` | Saved current launch configuration of windows, tabs, and panes | | `Select App Icon` | Selected app icon | -| `Select Command Palette Option` | Selected option from command palette (i.e. CMD-P) | +| `Select Command Palette Option` | Selected option from Command Palette (i.e. CMD-P) | | `Select Cursor Type` | Selected cursor type | | `Select Navigation Palette Item` | Selected session from the Session Navigation Palette (search across panes, tabs, and windows) | | `Select Theme` | Selected theme | @@ -601,7 +601,7 @@ If you're a [Team](/knowledge-and-collaboration/teams/) admin, the deletion flow | `Thin Strokes Setting Changed` | Changed thin strokes setting in settings -> Appearance | | `Tier Limit Hit` | User hit the tier limit for a feature | | `Toggle Active AI Enablement` | Toggled active AI enablement. | -| `Toggle Agent Mode Codebase Context` | Toggled on/off the enablement of codebase context usage for Agent Mode. | +| `Toggle Agent Mode Codebase Context` | Toggled on/off the enablement of Codebase Context usage for Agent Mode. | | `Toggle Agent Mode Query Suggestions Setting` | Toggled on/off the prompt suggestions setting | | `Toggle Approvals Modal` | Opened or closed teams modal | | `Toggle Block Filter Case Sensitivity` | Toggled on/off case sensitivity within the block filter editor | @@ -609,7 +609,7 @@ If you're a [Team](/knowledge-and-collaboration/teams/) admin, the deletion flow | `Toggle Block Filter Query` | Toggled on/off a block filter query | | `Toggle Block Filter Regex` | Toggled on/off regex within the block filter editor | | `Toggle Code Suggestions Setting` | Toggled on/off the code suggestions setting | -| `Toggle Codebase Context Autoindexing` | Toggled on/off the enablement of autoindexing for codebase context. | +| `Toggle Codebase Context Autoindexing` | Toggled on/off the enablement of autoindexing for Codebase Context. | | `Toggle Dim Inactive Panes` | Whether the dim inactive panes feature has been toggled | | `Toggle Focus Pane On Hover` | Toggled on/off focus pane on hover feature, which causes panes to automatically focus when hovering over them | | `Toggle Git Operations Autogen Setting` | Toggled on/off the git operations autogen setting | diff --git a/src/content/docs/support-and-community/privacy-and-security/secret-redaction.mdx b/src/content/docs/support-and-community/privacy-and-security/secret-redaction.mdx index 224dcc53d..30efaa35d 100644 --- a/src/content/docs/support-and-community/privacy-and-security/secret-redaction.mdx +++ b/src/content/docs/support-and-community/privacy-and-security/secret-redaction.mdx @@ -19,7 +19,7 @@ Warp ships with a [list of recommended regex](/support-and-community/privacy-and By default, identified secrets will be displayed with a strikethrough visual treatment, i.e. ` echo`` `` `~~`password`~~. -If instead you'd prefer to visually hide the secrets as well, i.e. `echo ********`, the setting to obfuscate secrets with asterisks can be found in **Settings** > **Privacy** > **Secret redaction** > **Hide secrets in blocklist**. +If instead you'd prefer to visually hide the secrets as well, i.e. `echo ********`, the setting to obfuscate secrets with asterisks can be found in **Settings** > **Privacy** > **Secret redaction** > **Hide secrets in denylist**. Clicking on a secret will display a tooltip that lets you reveal the secret or copy the secret's contents. When trying to copy terminal output containing secrets, it will be copied as asterisks (e.g. `echo password` becomes `echo ********`) unless revealed or copied from the tooltip. Secret redaction is not applied in [Session Sharing](/agents/local-agents/session-sharing/#secrets-in-shared-sessions) — treat a shared session like sharing your screen. diff --git a/src/content/docs/terminal/blocks/sticky-command-header.mdx b/src/content/docs/terminal/blocks/sticky-command-header.mdx index b98adf97f..4091550f3 100644 --- a/src/content/docs/terminal/blocks/sticky-command-header.mdx +++ b/src/content/docs/terminal/blocks/sticky-command-header.mdx @@ -11,7 +11,7 @@ import VideoEmbed from '@components/VideoEmbed.astro'; For long-running commands that take up the full screen, the sticky header only shows after you start scrolling up. This is to prevent the header from blocking the top part of the output for commands like `git log` that simulate full-screen apps. ::: -## How to access Sticky Command Header +## How to access sticky command header @@ -34,13 +34,13 @@ For long-running commands that take up the full screen, the sticky header only s -## How to use Sticky Command Header +## How to use sticky command header * If a Block has a large output ( e.g. `seq 1 1000`), the header of the Block will show on the top of the active Window, Tab, or Pane. * Click on the Sticky Command Header to quickly jump to the top of the Block. * While active you can also minimize the Sticky Command Header on the active pane by clicking the UP/DOWN arrow in the middle of the header. -## How Sticky Command Header works +## How sticky command header works diff --git a/src/content/docs/terminal/sessions/session-navigation.mdx b/src/content/docs/terminal/sessions/session-navigation.mdx index 6b897c4e7..1c03ff2b1 100644 --- a/src/content/docs/terminal/sessions/session-navigation.mdx +++ b/src/content/docs/terminal/sessions/session-navigation.mdx @@ -8,7 +8,7 @@ sidebar: --- import VideoEmbed from '@components/VideoEmbed.astro'; -## How to access Session Navigation +## How to access session navigation 1. Open the Session Navigation palette with the [Command Palette](/terminal/command-palette/), click on **session >\_** or type in "sessions:". 2. Jump to a session by using your mouse or the `UP ↑`/`DOWN ↓` arrow keys and `ENTER`. diff --git a/src/content/docs/terminal/sessions/session-restoration.mdx b/src/content/docs/terminal/sessions/session-restoration.mdx index fc8353673..dd3a735a8 100644 --- a/src/content/docs/terminal/sessions/session-restoration.mdx +++ b/src/content/docs/terminal/sessions/session-restoration.mdx @@ -13,7 +13,7 @@ import { Tabs, TabItem } from '@astrojs/starlight/components'; Session restoration allows you to quickly pick up where you left off in your previous terminal session. -## How to access Session Restoration +## How to access session restoration * Session Restoration comes enabled by default in Warp.