Concierge.
La capa de acciones segura para aplicaciones web listas para agentes.
Acciones tipadas y condicionadas al consentimiento para que una AI pueda operar tu aplicación web; sin tomar el control del navegador.
Tres paquetes, un mismo conjunto de versiones
Instala el runtime principal para una integración independiente del framework y luego añade el adaptador correspondiente. Instálalos y actualízalos juntos para que cada adaptador resuelva el mismo núcleo físico.
$ pnpm add @full-self-browsing/concierge zod$ pnpm add @full-self-browsing/concierge@^0.2 \
@full-self-browsing/concierge-react@^0.2 zodLa versión 0.2.1 es una vista previa pública compatible sobre el contrato de runtime v2. Las raíces de los paquetes React y Svelte son seguras en el servidor; sus enlaces de runtime viven en /client y /client.svelte. El despliegue en el edge no forma parte de la matriz de soporte de 0.2.
Publica verbos, no una superficie de página
La automatización genérica del navegador reconstruye la intención a partir de la estructura, los selectores o las coordenadas. Concierge permite que una aplicación cooperante publique los verbos exactos que una AI puede usar en este momento.
FSB opera sitios que no cooperan. Concierge es la capa de acciones para aplicaciones que sí cooperan. Los proyectos cubren partes distintas de la pila de navegación con agentes.
De la declaración a un resultado estructurado
La aplicación define acciones con nombre, descripciones, esquemas de entrada, reglas de disponibilidad, metadatos de efecto, política de redacción y manejadores.
Concierge resuelve la etapa activa y sus acciones disponibles en una instantánea inmutable del catálogo con una revisión local a la instancia.
El modelo recibe solo las herramientas admitidas por esa instantánea.
Concierge valida de nuevo cada acción solicitada antes de ejecutarla, aplica las reglas de consentimiento y programación, y rechaza llamadas caducadas o en conflicto.
El puente de la aplicación realiza la operación de interfaz aprobada y devuelve un resultado estructurado.
Aplicación
Definiciones de acciones, estado en vivo, operaciones de interfaz, autenticación y autorización en el servidor.
Concierge
Admisión del catálogo, validación, consentimiento, programación, desduplicación, despacho y flujos de trabajo.
Integración del modelo
Presentación de herramientas, llamadas al modelo, correlación de herramientas y entrega de resultados.
Declara una acción. Resuelve un catálogo.
Define cada acción como una constante con nombre, enlázala a una etapa y resuelve una instantánea atómica del catálogo para el estado actual de la aplicación.
- La etapa, la disponibilidad, las herramientas y la revisión se resuelven juntas
- Solo el valor literal true admite una acción; cualquier otra cosa falla en cerrado
- El catálogo resuelto está congelado en profundidad y nunca es autoridad entre runtimes
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 snapshotRuntime principal más enlaces de framework
Los paquetes públicos forman un conjunto de versiones fijo y comparten el contrato de runtime v2.
@full-self-browsing/conciergeRuntime independiente del framework para catálogo, despacho, consentimiento, flujo de trabajo, telemetría y transporte.
@full-self-browsing/concierge-reactContexto de React, ciclo de vida del puente y visuales de actividad opcionales, incluido ConciergeActivityOverlay.
@full-self-browsing/concierge-svelteContexto de Svelte, ciclo de vida del puente y normalización reactiva de instantáneas.
Una instancia, varios puntos de entrada
Monta la misma instancia de Concierge y el registro de puentes a través del adaptador adecuado. El estado basado en getters sigue vivo hasta que Concierge captura una instantánea para validar o consentir.
Los valores crudos de onToolCall son solo datos de visualización. Nunca accionan la aplicación. El puente firmado verifica el sobre, consume su clave de repetición, lo compara con el catálogo vivo del navegador y solo entonces entra en el despacho del núcleo.
A qué se atiene el runtime
Dispatch outcome
completedUn límite de mínima autoridad, no un sistema de autenticación
Modelo de seguridad
Concierge no autentica usuarios, y un registro de consentimiento del cliente no es autorización del servidor. Un servidor que realiza un efecto protegido debe autenticar de forma independiente al principal actual, autorizar la acción y la carga exactas bajo la política vigente, rechazar repeticiones y hacer el efecto idempotente o transaccional.
El puente de AI firmado autentica una decisión breve del servidor para admitir un lote concreto del navegador. No hace fiable la salida del modelo, no repara una vulnerabilidad XSS ni convierte el estado del cliente en autoridad del servidor.
Lee SECURITY.md antes de publicar una integración de consecuencia.
Telemetría
Los runtimes montados de React y Svelte envían por defecto estimaciones de uso anónimas a la canalización de estadísticas agregadas de FSB. Las integraciones vanilla montan la telemetría de forma explícita a través de la entrada solo de navegador /telemetry, que también ofrece estado y exclusión de APIs.
La telemetría nunca envía nombres de acción, argumentos, resultados, esquemas, etapas, URLs de página, contenido DOM, nombres de aplicación ni identificadores de cuenta. Si el almacenamiento del navegador no está disponible, la telemetría se detiene sin afectar el despacho.
Lee el contrato de privacidad de la telemetría para carga, retención y borrado.
Deja que una AI actúe sin entregar el navegador
TypeScript-first, solo ESM, con licencia MIT. Publicado bajo el ámbito @full-self-browsing npm.