연구 @full-self-browsing

Concierge.

에이전트를 위한 웹 애플리케이션의 안전한 동작 계층.

유형화되고 동의로 제한되는 동작을 통해, 브라우저를 넘겨주지 않고도 AI가 웹 앱을 조작할 수 있게 합니다.

▽0.2.1TypeScript-firstESM only · Node >=22.12MIT
설치

세 개의 패키지, 하나의 릴리스 세트

프레임워크에 중립적인 통합을 위해 코어 런타임을 설치한 뒤 해당하는 어댑터를 추가하십시오. 모든 어댑터가 동일한 물리적 코어를 참조하도록 함께 설치하고 함께 업그레이드하십시오.

코어 런타임
$ pnpm add @full-self-browsing/concierge zod
어댑터와 함께
$ pnpm add @full-self-browsing/concierge@^0.2 \ @full-self-browsing/concierge-react@^0.2 zod

버전 0.2.1은 런타임 계약 v2 기반의 지원되는 공개 미리 보기입니다. ReactSvelte 패키지 루트는 서버에서 안전하며, 런타임 바인딩은 /client/client.svelte에 있습니다. 엣지 배포는 0.2 지원 범위에 포함되지 않습니다.

Concierge

페이지 표면이 아니라 동사를 게시하십시오

일반적인 브라우저 자동화는 페이지 구조, 선택자, 좌표로부터 의도를 재구성합니다. Concierge는 협조하는 애플리케이션이 지금 이 순간 AI가 사용할 수 있는 정확한 동사를 게시하게 합니다.

일반적인 브라우저 자동화
Concierge
선택자나 좌표를 클릭
애플리케이션이 정의한 동사를 호출
보이는 인터페이스에서 의도를 재구성
유형화된 스키마와 실시간 가용성을 수신
넓은 페이지 권한을 상속
현재 동작 카탈로그만 확인
확인을 불리언으로 취급
동의를 검토된 페이로드 및 상태 스냅숏에 결속
모델 콜백이 브라우저를 작동시키도록 신뢰
전달 전에 서명되고 재생이 방지된 배치를 검증

FSB는 협조하지 않는 사이트를 조작합니다. Concierge는 협조하는 애플리케이션을 위한 동작 계층입니다. 두 프로젝트는 에이전트 브라우징 스택의 서로 다른 부분을 담당합니다.

동작 방식

선언에서 구조화된 결과까지

01

애플리케이션이 설명, 입력 스키마, 가용성 규칙, 효과 메타데이터, 편집 정책, 핸들러를 갖춘 이름 있는 동작을 정의합니다.

02

Concierge가 활성 단계와 사용 가능한 동작을 인스턴스 로컬 리비전이 포함된 하나의 불변 카탈로그 스냅숏으로 확정합니다.

03

모델은 그 스냅숏이 허용한 도구만 받습니다.

04

Concierge가 실행 전에 요청된 모든 동작을 다시 검증하고, 동의 및 스케줄링 규칙을 적용하며, 오래되었거나 충돌하는 호출을 거부합니다.

05

애플리케이션 브리지가 승인된 인터페이스 작업을 수행하고 구조화된 결과를 반환합니다.

애플리케이션

동작 정의, 실시간 상태, 인터페이스 작업, 인증, 서버 권한 부여.

Concierge

카탈로그 허용, 검증, 동의, 스케줄링, 중복 제거, 전달, 워크플로.

모델 통합

도구 표현, 모델 호출, 도구 상관 관계, 결과 전달.

빠른 시작

동작을 선언하십시오. 하나의 카탈로그를 확정하십시오.

각 동작을 이름 있는 상수로 정의하고 단계에 연결한 뒤, 현재 애플리케이션 상태에 대해 하나의 원자적 카탈로그 스냅숏을 확정하십시오.

  • 단계, 가용성, 도구, 리비전이 함께 확정됩니다
  • 리터럴 값 true만이 동작을 허용하며, 그 외에는 모두 차단됩니다
  • 확정된 카탈로그는 깊게 동결되며 런타임을 넘는 권한이 되지 않습니다
actions/open-project.ts
import { createBridge, createConcierge, defineAction, offPageResult } from "@full-self-browsing/concierge";
import { z } from "zod";

const projectBridge = createBridge<{
  actions: { openProject(id: string): void };
  snapshot: { activeProject(): string | null };
}>("project-ui");

const openProject = defineAction({
  name: "openProject",
  description: "Open one project in the application preview.",
  schema: z.object({ projectId: z.string().min(1).max(64) }).strict(),
  jsonSchema: {
    type: "object",
    properties: { projectId: { type: "string", minLength: 1, maxLength: 64 } },
    required: ["projectId"],
    additionalProperties: false,
  },
  redact: ({ projectId }) => ({ projectId }),
  effects: { readOnly: false, destructive: false, idempotent: true },
  handler: ({ args, bridge }) => {
    if (bridge === null) {
      return offPageResult("Project opening", "project interface");
    }
    bridge.actions.openProject(args.projectId);
    return { ok: true, message: `Opened project ${args.projectId}.` };
  },
});

const concierge = createConcierge({
  stages: [
    {
      id: "projects",
      match: (context) => context.pathname === "/projects",
      actions: [openProject],
      bridge: projectBridge,
    },
  ],
});

const catalog = concierge.resolveCatalog({ pathname: "/projects" });

// → catalog.stage · catalog.revision · catalog.tools   one snapshot
패키지

코어 런타임과 프레임워크 바인딩

공개 패키지들은 하나의 고정된 릴리스 세트를 이루며 런타임 계약 v2를 공유합니다.

코어@full-self-browsing/concierge

프레임워크에 중립적인 카탈로그, 전달, 동의, 워크플로, 텔레메트리, 전송 런타임.

React@full-self-browsing/concierge-react

React 컨텍스트, 브리지 수명 주기, 그리고 ConciergeActivityOverlay를 포함한 선택적 활동 시각화.

Svelte@full-self-browsing/concierge-svelte

Svelte 컨텍스트, 브리지 수명 주기, 반응형 스냅숏 정규화.

Node.js>=22.12.0
Module formatESM only
React · React DOM^18.2.0 || ^19.0.0
Svelte^5.0.0
AI SDK core^6.0.0 || ^7.0.0
Runtime contractv2 throughout 0.2.x
통합

하나의 인스턴스, 여러 진입점

동일한 Concierge 인스턴스와 브리지 레지스트리를 적절한 어댑터를 통해 마운트하십시오. 게터 기반 상태는 Concierge가 검증이나 동의를 위해 스냅숏을 캡처할 때까지 실시간으로 유지됩니다.

통합
런타임 진입점
안내
프레임워크 중립
@full-self-browsing/concierge
코어 런타임을 사용하고 애플리케이션 브리지를 직접 등록하십시오.
React
/concierge-react/client
코어 인스턴스를 제공하고, 브리지를 등록하고, 필요하면 활동 오버레이를 렌더링하십시오.
Svelte
/concierge-svelte/client.svelte
Svelte 스냅숏 정규화기와 함께 코어 인스턴스를 제공하고, 초기화 중에 브리지를 등록하십시오.
AI SDK 6 & 7
/concierge/ai-sdk
확정된 카탈로그를 모델 도구로 변환하고 완료된 호출을 연결하십시오.
서명된 서버 브리지
/ai-sdk/server · /ai-sdk/browser
카탈로그 다이제스트에 결속된 단기 브라우저 배치를 발급하고, 검증하고, 전달하십시오.

원시 onToolCall 값은 표시용 데이터일 뿐이며 애플리케이션을 작동시키지 않습니다. 서명된 브리지는 봉투를 검증하고, 재생 키를 소비하고, 실시간 브라우저 카탈로그와 비교한 뒤에야 코어 전달 단계로 들어갑니다.

런타임 보장

런타임이 지키는 것

Dispatch outcome

completed
nameopenProject
callIdcall_7f2c · index 0
catalogRevisionstage projects · fresh
consentbound · consumed once
dedupesession · response · callId
onDispatchredacted lifecycle
동작 입력은 실행 직전에 다시 검증되며, 부수 효과가 있는 동작은 취소 가능한 커밋 구간을 거칩니다.
동일한 재시도는 하나의 Promise를 공유하며 중복 제거 구간 안에서 두 번 실행될 수 없습니다. 동작, 입력, 턴, 리비전이 바뀌면 identity_conflict가 반환됩니다.
배치는 outputIndex 순서로 실행되며 완료 또는 종료 결과를 명시적으로 반환합니다.
복합 동작은 코어가 소유하는 하위 전달, 정리, 지연, 제한된 계보를 사용합니다. 루트 워크플로당 중첩 16단계, 256스텝입니다.
0.10.2 설치가 섞이면 브리지 등록이나 전달 이전에 실패합니다.
보안 및 개인정보

인증 시스템이 아니라 최소 권한 경계

보안 모델

Concierge는 사용자를 인증하지 않으며, 클라이언트의 동의 기록은 서버의 권한 부여가 아닙니다. 보호된 효과를 수행하는 서버는 현재 주체를 독립적으로 인증하고, 현재 정책에 따라 정확한 동작과 페이로드를 승인하고, 재생을 거부하고, 그 효과를 멱등적이거나 트랜잭션적으로 만들어야 합니다.

서명된 AI 브리지는 특정 브라우저 배치 하나를 허용하겠다는 단기 서버 결정을 인증합니다. 모델의 출력을 신뢰할 수 있게 만들거나, XSS 취약점을 고치거나, 클라이언트 상태를 서버 권한으로 바꾸지는 않습니다.

SECURITY.md를 읽고 나서 중대한 통합을 배포하십시오.

텔레메트리

마운트된 ReactSvelte 런타임은 기본적으로 켜진 익명 사용 추정치를 FSB의 집계 통계 파이프라인으로 전송합니다. 바닐라 통합은 브라우저 전용 /telemetry 진입점을 통해 텔레메트리를 명시적으로 마운트하며, 이 진입점은 상태 확인과 수신 거부 APIs도 제공합니다.

텔레메트리는 동작 이름, 인수, 결과, 스키마, 단계, 페이지 URLs, DOM 콘텐츠, 애플리케이션 이름, 계정 식별자를 결코 전송하지 않습니다. 브라우저 저장소를 사용할 수 없으면 전달에 영향을 주지 않고 텔레메트리가 중단됩니다.

텔레메트리 개인정보 계약에서 페이로드, 보관 기간, 삭제 방법을 확인하십시오.

브라우저를 넘겨주지 않고 AI가 동작하게 하십시오

TypeScript 우선, ESM 전용, MIT 라이선스. @full-self-browsingnpm 스코프로 배포됩니다.