Loop 0.5.0 · 2026-10-31
文档对应最新 npm 发布版本,保留英文原文。
Integration settings
Open Settings → Integrations → MCPs to manage MCP servers, or Skills to manage skills. These are separate Settings sections with their own headings and search fields. MCPs uses a plug outline in navigation; Skills uses a document outline. The Skills subtitle and search placeholder read Manage Skills and Search Skills in English. Server rows show transport, current connection status and discovered tool count. The gear edits configuration; the switch persists enabled state; failed connections offer Retry. The header says Manage MCPs. Each integration panel uses the same 18px, medium-weight heading and 13px control text as other Settings sections, with a pill search field and outline search icon. Both titles align vertically with their compact 32px search fields and Add on the first row. Manage MCPs and Manage Skills occupy a separate full-width row below. Skills places Refresh between search and Add. MCPs has no visible server-count badge; Skills keeps its Personal and named-project tabs below the Installed overview. Both catalogs default to two columns, switching to one column below a 480px panel width. Standard rows are about 56px high with 10px vertical padding, 32px icon tiles, 13px names, 12px secondary text and compact actions; MCP errors retain readable wrapping and Retry. Server rows have no card borders; transport icons, server names, status details and blue enabled switches share a consistent alignment. The compact pill Add button uses a 34px minimum height, with black background and white text in Light and the inverse in Dark. Both sections share the same rounded dropdown styling. Skills offers Create skill, Install from GitHub and Add local folder; MCPs offers only Add MCP server. The dropdown has a 196px minimum width, 4px inset and 12px outer radius. Each compact 32px row has a muted 16px outline icon, 12px label and 8px icon-to-label gap. Selecting an action opens its inline form in the current section; pointer selection and Enter activate it, arrow keys cycle between items, Escape closes the menu and restores trigger focus, and clicking outside or pressing Tab dismisses it. Transient focus changes during pointer activation do not remove the item before its click opens the form.
On narrow screens, the navigation becomes more compact and the search field shrinks within the first row while titles, search and actions stay aligned. Server actions wrap below their details. Configuration fields stay inside the panel while long forms scroll vertically.
Adding and editing
The configuration form replaces only the server list: the MCPs heading, Manage MCPs description and header search remain visible. Add stays visible but is disabled while a draft is open. Back restores the list and its search. Provide a display name and select STDIO or Streamable HTTP. Each transport retains its own draft when switching; Save sends only the selected transport. The form uses a compact 16px heading, 12px labels, input and button text, and 11px helper text. Name and the connection type share one rounded card. Name occupies the upper section; a full-width divider separates the lower row, which places Type on the left and compact STDIO/Streamable HTTP choices on the right, with a filled selected choice and muted inactive text. Other fields use rounded inputs and 18px section spacing. Errors preserve the form. Back returns to the server list; Delete asks for confirmation before removal.
STDIO fields are launch command, separate argument rows, literal environment key/value rows, environment-variable passthrough names and an optional absolute working directory. HTTP fields are URL, bearer-token environment-variable name, literal header rows and header keys mapped to environment-variable names. Each repeatable field starts with one empty input row, including when the saved list is empty or its final row is removed. Add appends another row. Unused optional key/value and environment-reference rows are omitted on save; saved write-only values and intentionally empty command arguments are retained. Add/remove row controls operate independently. Each row uses a muted outline trash icon for deletion, with a localized accessible label.
Literal environment/header values are password inputs and write-only after saving. Leave a saved value empty to keep it, replace it to update, or remove the row to delete. Changing the connection target requires re-entering retained values. Environment references contain variable names, not secret values; they refer to the environment in which the backend was started.
Save persists locally and starts connection asynchronously. Saving and verification preserve the form’s current scroll position. A translucent overlay covers its fields and actions immediately on Save, with a ring spinner and nearby localized saving, queued, connecting or refreshing guidance. The indicator stays visible within the scrollable panel. The helper copy is a brief Please wait a moment in the selected language, without download, timeout or background-operation details. Loop reports actual lifecycle stages without guessing download percentages. Once the connection is ready, the form closes and returns to the MCP list. Saving a disabled server also returns to the list after persistence. Persistence or connection failure removes the overlay and keeps the form open at the current position with a safe error. The MCPs header, navigation and Back remain outside the overlay; Back is available after persistence. Fields and Save are disabled during this verification, while Back remains available after persistence. STDIO saves allow up to two minutes for first-launch downloads; HTTP saves, normal startup, enabling and list Retry keep their short deadlines. Failure retains the saved configuration and enables editing or Save again; subsequent saves update the existing server instead of creating a duplicate. Successfully saved literal values are cleared from inputs and marked saved for write-only retention. Connecting servers do not delay startup, typing, chat requests or built-in tools. Connected tools become available on the next user prompt. Queued means waiting for a discovery slot; Connecting performs initialization and discovery; Refreshing tools updates a changed catalog on the existing connection. A connection error does not interrupt unrelated sessions; the row gives a safe explanation and recovery hint, and Retry starts fresh discovery. The page refreshes status every second during queued, connecting or refreshing states, otherwise every three seconds while visible with enabled servers.
Storage, approvals and limits
Configuration lives outside the project in <agentDir>/mcp.json, with private file permissions and no browser persistence. Literal values are plaintext on disk; prefer environment references for credentials. STDIO launches the configured process with host access. Chat execution rows and completed batch summaries display the server name and original full tool name, for example Example MCP · list_directory, instead of hashed internal identifiers. New results retain this presentation label in history. Legacy results can use a ready catalog to resolve names; otherwise they retain the internal identifier. MCP calls follow session permissions: Full access calls tools without confirmation, while Read only and Workspace write require approval unless a live tool/session grant exists. MCPs has no separate permission settings. Server risk declarations do not bypass approval or enforce access boundaries. Calls requiring approval show the server, tool and exact arguments, with Deny, Allow once and Allow this tool for this session. The session option covers that exact tool with any arguments until its live session or catalog lifetime ends. Configuration changes, disabling, reconnecting and catalog refresh revoke grants; display-name-only edits preserve them. Session grants are not saved or shared between sessions. Cancelling a call may not undo changes already made by the external server.
Integrations manages MCP servers and skills in separate Settings sections. OAuth, plugin bundles, MCP Apps, resources and prompts are not implemented. A changed server tool catalog refreshes automatically; stale tools and approvals are invalidated immediately. Failed refreshes offer Retry. Automatic reconnection is not implemented. See core MCP behavior and HTTP endpoints.
Skills
The Skills section includes an Installed overview between search and the scope tabs. It aggregates discovered personal and registered-project skills, including disabled or externally managed entries, deduplicated by exact source identity and sorted by name. Different sources with the same name remain separate. Initially show at most six matching rows; when more than six match, Show more expands all rows in place and becomes Show less, which collapses back to six. The same button retains focus and exposes the current expansion state. Reopening the section starts collapsed; neither control appears when at most six rows match. Search filters both the overview and scoped list. Overview detail, toggle and update operations retain the owning project; personal operations use the personal catalog. Project discovery runs in parallel with cached queries and never blocks the rest of Settings. Show available rows during discovery or partial failures, with a status or error instead of a misleading empty state. An empty overview uses a brief No skills yet label.
The Skills heading row places search, the icon Refresh button and Add in that order. Refresh uses a circular arrow with a distinct arrowhead and a thicker stroke for clarity. Horizontal scope tabs remain below the Installed overview. Personal is selected initially and shows only personal skills. Each registered project has a tab labeled with its name, showing only that project's skills; personal entries are excluded from project views. Arrow keys, Home and End change between visible scope tabs. Actual rendered label widths determine which projects fit beside Personal across the scope row. Overflow projects are hidden behind an ellipsis button that opens a compact More projects dropdown listing only hidden projects, with folder icons, 32px rows and 12px labels. Selecting a project closes the menu, switches scope and promotes its label into the visible row when space permits; on very narrow panels the ellipsis indicates an active hidden project. Resizing, label changes and loaded fonts recalculate the visible set. Up/Down and Home/End navigate menu items. Escape dismisses only the menu and restores focus to the ellipsis; Tab resumes the normal focus order and clicking outside dismisses it; installation and pending actions disable overflow selection. Search stays intact across scope changes, detail dialogs close, and a removed selected project falls back to Personal. Scope changes are disabled during pending row actions and installation so operations retain their target. Refresh checks local directories; errors and loading states do not masquerade as an empty catalog.
Both catalogs use the same pill search component with an outline search icon, 13px text, muted placeholder, matching padding and focus ring, and shared narrow-screen sizing. The Skills heading, Add menu and header search remain visible while an inline installation form replaces the list. Scope controls align to the same 12px inset as MCP rows (4px on narrow screens). Skill rows share the MCP compact padding, hover background, 32px icon tile, 13px name, 12px description and 32px by 20px blue enable switch. Descriptions use a single line with an ellipsis and a full-text tooltip; invalid skills retain a Needs attention label. MCPs, Installed Skills and scoped Skills share a two-column grid at normal Settings width and a single column below 480px. Truncated names and MCP connection metadata have full-text tooltips. Empty and filtered states span the list width. Opening a row displays a separate modal above the unchanged list and scope tabs. The modal has an icon, title and description, a header enable switch and Close button, a bounded scrolling Markdown instruction area, and expandable source/scope/files information. Footer controls remain visible for Use in chat, a managed GitHub update or confirmed uninstall. Disablement immediately disables Use in chat. Mutations lock dismissal until settled; failures remain inside the modal. Close or Escape dismisses only the detail modal, restores focus to the original row and preserves list search and scroll. Successful uninstall closes the modal; Update opens the existing inline preview flow. Externally managed sources offer disablement without deletion.
The Skills Add menu supports Install from GitHub, Add local folder and Create skill. The MCPs Add menu contains only Add MCP server. Closing a form or switching sections does not reopen an earlier draft. Select the intended Personal or project tab before opening Add. New forms default to that scope; project forms name the target project and also allow Personal installation. Updates retain their original scope. Preview metadata, included files and instructions, then select candidates and Install. Successful Personal installation from a project form returns to Personal; project installation returns to the selected project. A translucent overlay displays the real current stage and supports Cancel. Inputs and scroll are retained on failure; success returns to the list. Source edits invalidate the displayed preview. GitHub downloads use public repositories and an optional version; installation never runs scripts or dependency setup.
In chat, type $ at the end of the input to open the skill picker above the composer, with a Skills heading and an Escape hint. An empty catalog shows No skills yet and a brief Add skills to get started hint, without an icon or detailed setup path; a catalog containing only disabled or invalid entries shows No enabled skills and brief enablement guidance. Empty, unavailable and unmatched states use plain text; only loading displays a spinner. A search with no matches suggests another name or clearing the search. Initial loading and discovery show their own status rather than an empty result; failures show an error without claiming no skills exist. Each compact 36px row shows an outline skill icon, a name and muted description on one line, with Personal or Project aligned right. Long names and descriptions use ellipses; hover reveals the complete name, scope and description, plus the source path for duplicate names. Selected, hovered and focused rows use a rounded neutral background. Narrow screens reduce spacing and icon size while retaining the same row structure. Arrow keys move selection, Enter selects without sending, and Escape dismisses. Each selection becomes a blue icon/name token alongside editable text in the input area, without a background capsule or a separate row below. Skill tokens are static labels with no click action. Press Backspace at the start of the text to remove the last token; composition and disabled states do not remove selections. Token labels stay separate from prompt text. Draft selections are persisted locally and sent by exact source identity with request replay. Once the submitted user message appears in history, the input hides skill tokens together with text and attachments during generation. Success clears the selections; failure or cancellation restores the retained draft selections. Changing the draft project clears skill selections. The details Use in chat action targets the active chat when its project is compatible.
The model sees a bounded name/description catalog and can call load_skill; bodies load only on selection or tool invocation. Explicit selections appear as blue skill icons and names inline at the beginning of the associated user message bubble, including attachment-only or skill-only messages. Skill labels use a hand cursor. Skill names inherit the message typography and share the body text baseline; icons align to the text without shifting the labels. Hover, keyboard focus or tap opens a compact description tooltip using the current theme's raised background, text, border and shadow. The tooltip fits within the viewport, stays open while hovered and closes on Escape, focus/pointer departure, conversation scroll or resize. New messages retain the description captured when loading. Older messages look up the exact source in the current project catalog on demand; missing sources show a brief unavailable message. The labels use saved load metadata and exact source identities, so reopened history retains its names and same-name skills from different sources remain separate. Ordinary prompt text stays unchanged. Copy message writes readable plain text plus structured clipboard HTML containing only the prompt text and exact skill identities/names. Pasting it into Loop restores blue selections and inserts only the original body at the caret, merging existing selections without duplicates. Foreign or malformed HTML remains plain text; files keep attachment handling. More than eight merged skills falls back to plain text. Skill availability is rechecked when sending. Browsers that cannot write rich clipboard content fall back to plain text, which does not restore skill tokens. Instructions, descriptions, source paths and credentials are excluded from clipboard metadata. Explicit selections have no separate load record below the message. Automatic loads appear in tool history. Saved instructions remain unchanged by updates or disablement; disablement prevents new loads. Existing context budgets and tool permissions apply.
SkillsSettings owns scoped list/detail navigation; InstalledSkills owns the six-row overview, expansion and source-specific actions, using useInstalledSkills to aggregate cached catalogs; SkillScopeTabs provides project labels and keyboard scope selection; useSkillScopeLayout measures available space and SkillProjectMenu lists overflow projects; SkillInstallForm, SkillPreview, SkillRow and SkillDetails provide focused UI units; SkillDetails owns its modal and management-action errors while using the shared sanitized Markdown renderer. ComposerSkills owns the picker, ComposerSkillTokens renders selected blue tokens inside the input area, ComposerSkillStatus renders localized picker status guidance, UserMessage renders saved selections inside user message bubbles; UserMessageSkill owns blue labels and their theme-aware description tooltips, and useSkills / useSkillInstall own requests and job lifecycle. Each component has colocated tests and styles. See core contracts and HTTP endpoints.
Source and tests
SettingsDialog owns section selection; McpSettings owns MCP data and edit navigation; PluginSearch provides the shared controlled search field for both catalogs, McpServerList owns filtering and empty states, and McpServerRow owns each server display and action callbacks. These display components accept props without fetching or persisting configuration. PluginAddMenu owns the shared menu styling, section-specific actions and keyboard/dismissal behavior. McpForm, McpTransportFields, McpRows and their colocated tests; McpSetupStatus displays saved verification state; useMcpSettings owns management requests and status polling.