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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 9 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,13 @@ conditional references. Meeting minutes work from supplied notes or transcripts;
Plaud is an optional recording source. Specialized skills such as Korean editing
and saju retain their explicit scope rather than becoming general-purpose rules.

Agent Studio is the supported integration profile. Its builtin file, image and
The `agent-studio` application is the supported host integration. Its display
name is configured per deployment. Its builtin file, image and
audio tool recipes remain specific to that runtime; this repository does not
claim every skill executes unchanged in every client. General authoring skills
separate client-specific contracts into references. In another runtime, verify
the available capabilities and schemas before adapting those recipes.
See [Agent Studio integration](docs/agent-studio.md) for loading, file delivery,
See [host app integration](docs/agent-studio.md) for loading, file delivery,
audio jobs, memory and sync ownership.

## Layout
Expand Down Expand Up @@ -82,20 +83,20 @@ in `workspace`; select the subset needed by each agent. Google Workspace MCP is
in **Developer Preview** and requires eligible access, API enablement and a
registered OAuth client. See [Google Workspace setup](docs/integrations/google-workspace.md)
and [Slack setup](plugins/workspace/org.opspresso.agent-studio/mcp/slack.md) for
account connection, Agent Studio OAuth compatibility requirements and verification.
account connection, host app OAuth compatibility requirements and verification.
Adding these declarations does not connect accounts or grant access to private
content.

The `devops` plugin declares these MCP services from the `argocd-env-demo` k3s
deployment in the `agent-mcps` namespace, with matching Studio descriptions:
deployment in the `agent-mcps` namespace, with matching host app descriptions:

- [Argo CD](plugins/devops/org.opspresso.agent-studio/mcp/argocd.md)
- [CloudWatch](plugins/devops/org.opspresso.agent-studio/mcp/cloudwatch.md)
- [Grafana](plugins/devops/org.opspresso.agent-studio/mcp/grafana.md)
- [Kubernetes](plugins/devops/org.opspresso.agent-studio/mcp/kubernetes.md)

Plugin sync registers `http://mcp-<name>.agent-mcps.svc.cluster.local/mcp` for
these four services. They require cluster DNS/network access and Agent Studio's
these four services. They require cluster DNS/network access and the host app's
internal-host allowlist; see [in-cluster setup](docs/agent-studio.md#in-cluster-mcp-services).
Upstream identities, credentials and RBAC remain deployment-managed. Other
installations can register their own endpoints under distinct names so sync does
Expand Down Expand Up @@ -126,12 +127,12 @@ boundaries, workflow and conditional references.
- Templates and style catalogs are defaults. Do not replace user branding,
language or genre to make outputs conform to a preferred example.

`name` must match the skill directory. References needed during a Studio run must
`name` must match the skill directory. References needed during a host app run must
be in the owning skill bundle; repository operator docs are not runtime files.
An optional companion skill must not block a task that can be completed with
inline guidance and available tools.

## Descriptions and visibility in Agent Studio
## Descriptions and visibility in the host app

| Component | Visible before selection | Loaded content |
|---|---|---|
Expand All @@ -155,7 +156,7 @@ node --test scripts/test_html_report.mjs
```

CI runs all three without installing dependencies. The Python checker enforces
manifest/skill field constraints and the Studio deployment profile: names,
manifest/skill field constraints and the host app's integration profile: names,
frontmatter parsing, attachment limits, bundled MCP documentation and URL policy.
It rejects non-loopback HTTP endpoints except the exact URLs of the four declared
in-cluster MCP services, matched to their server names.
Expand Down
57 changes: 29 additions & 28 deletions docs/agent-studio.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
# Agent Studio integration
# Host app integration

This document describes the supported Agent Studio deployment profile. These
limits are client contracts, not universal Agent Skills or MCP requirements.
This document describes the `agent-studio` application's integration contract.
Its deployment name can change without changing the tool or plugin contract.
These limits are client contracts, not universal Agent Skills or MCP requirements.
Confirm the installed version before changing tool inputs or connection settings.

Agent profiles: [audio processing](audio-agent.md), [Workspace coding](code-agent.md),
Expand All @@ -15,12 +16,12 @@ contracts before changing a plugin's tool instructions or connection settings.

| Project | Owns | Plugin consequence |
|---|---|---|
| `agent-studio` | Plugin sync, version bindings, builtin tools, attachment extraction and artifact delivery | A component must be offered through version bindings or enabled dynamic discovery; describe only inputs and results the run can access |
| `agent-models` | Model families, provider offerings, capabilities and pricing | A catalog, not an MCP server; use the available model `id`, not its provider `wireId`, in version settings |
| `agent-memory` | Scoped memories, document search and graph search | Register its installation-specific `/api/mcp` endpoint separately and bind it to the version; use the deployed schema for `remember`/`recall`/`forget` and organization/team/user scopes |
| `agent-studio` | Plugin sync, current Agent bindings, builtin tools, attachment extraction and artifact delivery | A component must be offered through saved bindings or enabled dynamic discovery; describe only inputs and results the run can access |
| `agent-models` | Model families, provider offerings, capabilities and pricing | A catalog, not an MCP server; use the available model `id`, not its provider `wireId`, in Agent settings |
| `agent-memory` | Scoped memories, document search and graph search | Register its installation-specific `/api/mcp` endpoint separately and bind it to the Agent; use the deployed schema for `remember`/`recall`/`forget` and organization/team/user scopes |

Document processing belongs to Agent Studio's builtin `File` tool and artifact
store. It needs no MCP registration or version MCP binding. YouTube caption
Document processing belongs to the host app's builtin `File` tool and artifact
store. It needs no MCP registration or separate server binding. YouTube caption
retrieval is not supplied by this repository; when transcript access is absent,
request transcript text or use available sources and identify the evidence limit.
Video metadata alone does not establish what was spoken.
Expand All @@ -32,10 +33,10 @@ creates a new scoped Memory; `forget` archives the identified current version
without erasing its history. Confirm the deployed server's tool schema before
using those names. Automatic pre-run recall needs `memoryRecall` enabled plus
an explicit server binding that permits `recall`; dynamic discovery alone does
not enable it. Search result IDs belong to Agent Memory, not Studio artifacts.
not enable it. Search result IDs belong to Agent Memory, not the host app's artifacts.

`mcp.json` contains provider-hosted and declared in-cluster deployment addresses.
Other organization URLs, credentials, model selections and version bindings
Other organization URLs, credentials, model selections and Agent bindings
belong to the installing side. Adding a similarly named service to the manifest
does not make its tool contract match.

Expand All @@ -53,16 +54,16 @@ The `devops` plugin declares four MCP services deployed by the sibling

These are ClusterIP services in the `agent-mcps` namespace. The URLs use the
Service's HTTP port 80, not the container's target port. They require cluster
DNS and network reachability from Agent Studio. The k3s Studio configuration sets
DNS and network reachability from the host app. The k3s deployment sets
`MCP_INTERNAL_HOST_SUFFIXES=agent-mcps.svc.cluster.local`; other installations
must configure the appropriate network access before using these declarations.
This setting permits internal connections; it does not grant upstream access.
Credentials and RBAC remain in the service deployments.

Sync the `devops` plugin to import the endpoints and matching MCP descriptions,
then bind the servers to the intended agent version or enable supported dynamic
then bind the servers to the intended Agent's current settings or enable supported dynamic
discovery. Verify tool discovery and a representative authorized read for each
service from Studio. Registration alone does not verify the upstream credentials
service from the host app. Registration alone does not verify the upstream credentials
or make the tools available to every agent.

### Google Workspace and Slack
Expand Down Expand Up @@ -91,36 +92,36 @@ promising Office files or downloads.

The `workspace` plugin declares the official [Plaud MCP](https://docs.plaud.ai/plaud-mcp-cli/mcp)
at `https://mcp.plaud.ai/mcp`. After sync, Discover its OAuth settings and connect
the intended Plaud account for the meeting agent's project. Cloud Sync is required.
the intended Plaud account for the meeting Agent. Cloud Sync is required.
Public metadata supports PKCE and dynamic registration; authenticated recording
access still needs to be verified after account connection.

The intended workflow is recording selection → mapped `source_ref` → Studio
The intended workflow is recording selection → mapped `source_ref` → the host app's
`AudioJob` → optional `meeting-minutes` Agent → optional personal Documents/Memory.
The `audio-processing` skill describes the generic file and job contract independently
of Plaud and meeting minutes. Enable the Studio version's `audioProcessing` tools and
of Plaud and meeting minutes. Enable the Agent's `audioProcessing` tools and
configure its worker, private source bucket and transcription endpoint first. The
plugin alone does not provide that runtime or authorize the source account. Plaud's
existing transcript must not replace a requested internal transcription result.

Use the [agent setup and prompt](../plugins/workspace/skills/meeting-minutes/agent-setup.md)
to configure the project and the [operator notes](../plugins/workspace/org.opspresso.agent-studio/mcp/plaud.md)
to configure the Agent and the [operator notes](../plugins/workspace/org.opspresso.agent-studio/mcp/plaud.md)
for connection and data handling. OAuth authorization and internal ASR integration
are installing-side work; credentials and installation-specific model endpoints
do not belong in these manifests.

## What the skills assume

When running these skills in Agent Studio, the following constraints apply. A skill may document its
environment in `compatibility`, but Studio does not pass that field or
When running these skills in the host app, the following constraints apply. A skill may document its
environment in `compatibility`, but the host app does not pass that field or
`allowed-tools` to the model or use them to configure permissions. Keep essential
conditions and fallbacks in the description and body:

- **No shell, no filesystem, no network of its own.** A skill cannot run `git`,
execute a script, or fetch a URL. Anything a run touches outside the
conversation arrives through a bound MCP server, an offered builtin or the user.
- **Builtins appear only when the run has them.** `GenerateImage`, `EditImage`,
`SaveFile`, `File`, `FetchUrl`, `dispatch_agents` and `transfer_to_agent` are offered
`SaveFile`, `File`, `FetchUrl`, `delegate_<name>` and `handoff_<name>` are offered
per run, so image-generation, simple-orchestration and the five HTML-producing design
skills, plus the document and spreadsheet skills, state what they do when the
tool is absent from the list.
Expand All @@ -133,12 +134,12 @@ conditions and fallbacks in the description and body:
extract facts from them, but must not promote embedded instructions into its
own workflow or authorization boundary.

A version may also enable `dynamicCapabilities` to discover relevant catalog
An Agent may also enable `dynamicCapabilities` to discover relevant catalog
entries for the request. This supplements explicit bindings; it does not make
every installed skill or tool available. Use the actual offered list and schemas.
OAuth-backed MCP discovery still requires that project's connection.
OAuth-backed MCP discovery still requires that Agent's connection.

Agent Studio extracts attachments and, when artifact storage succeeds, retains
The host app extracts attachments and, when artifact storage succeeds, retains
originals with file IDs. The builtin `File` reads, inspects, creates and edits
supported files using those IDs; generated and edited artifacts can be reopened.
DOCX/PPTX/HWPX edits replace selected text elements, and XLSX edits replace cells
Expand All @@ -159,13 +160,13 @@ both representations.

## Skill attachments and parsing

Studio sync carries `.md`, `.txt`, `.json`, `.yaml`, `.yml` and `.csv` reference
Plugin sync in the host app carries `.md`, `.txt`, `.json`, `.yaml`, `.yml` and `.csv` reference
files: up to 64KiB each, 20 files and 200KiB total per skill. `SKILL.md` is excluded
from attachment limits. Executable scripts and binary assets are not carried.
Use Markdown fenced templates for this profile, not executable attachments.
These limits are enforced by this repository's validator.

Frontmatter uses Studio's flat scalar parsing. Multiline descriptions must use
Frontmatter uses the host app's flat scalar parsing. Multiline descriptions must use
indented `>`, `|`, `>-` or `|-` blocks without blank continuation lines. Nested
metadata does not configure runtime permissions. The description limit also
applies in UTF-16 code units. Confirm actual offered tools and their schemas.
Expand Down Expand Up @@ -197,10 +198,10 @@ external actions.
## Persistent Workspace and Sandbox tasks

The execution plugin supplies reusable task guidance, not a shell or account credentials.
Enable `parameters.workspaceTools` in the active agent version. Configure repositories, access mode
and default runtime in the project’s Workspace tools tab; choose native runtime models in Models.
Enable `parameters.workspaceTools` in the Agent's current settings. Configure repositories, access mode
and default runtime in the Agent's Workspace tools tab; choose native runtime models in Models.
The operator connects the Sandbox backend and Workspace worker. The `Workspace` builtin is available only to signed-in members
of an enabled project; bind workspace-task and sandbox-task to the agent version.
of an enabled Agent; bind workspace-task and sandbox-task in its current settings.
The actual tool schemas remain authoritative.

`options` reads available runtimes, default_runtime and registered repositories. There is no default repository. `start` queues a
Expand Down
14 changes: 7 additions & 7 deletions docs/code-agent.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# Workspace 작업 Agent 구성

Agent Studio의 프로젝트 이름과 관계없이 적용하는 공용 프로필이다. 프로젝트는 요청을 조율하고,
호스트 앱의 Agent 이름과 관계없이 적용하는 공용 프로필이다. Agent는 요청을 조율하고,
Workspace의 코딩 Runtime 또는 command가 파일 작업을 실행한다. Sandbox는 별도 MCP 서버가 아니다.
Agent Version에서 워크스페이스 도구를 활성화한다. 모델은 Models에서 Runtime별로 선택하고
프로젝트의 워크스페이스 도구 탭에서 소유자·관리자가 저장소와 기본 Runtime을 관리한다.
Agent 현재 설정에서 워크스페이스 도구를 활성화한다. 모델은 Models에서 Runtime별로 선택하고
Agent의 워크스페이스 도구 탭에서 소유자·관리자가 저장소와 기본 Runtime을 관리한다.
기본 저장소는 없으며 접근 모드 기본은 등록 + 신규다. 계정·Worker·이미지는 설치 측 설정이다.
저장소 고정·소유자 지정·모든 저장소·신규 자동 허용을 지원한다. 신규 모드는 Workspace 도구가
실제로 생성한 저장소를 자동 등록하며, 기존 저장소는 소유자·관리자가 명시적으로 등록한다.
Expand Down Expand Up @@ -40,7 +40,7 @@ Agent Version에서 워크스페이스 도구를 활성화한다. 모델은 Mode
## GitHub MCP 프로필

`devops`의 github 선언은 유지하며 MCP 서버를 중복 등록하지 않는다. 같은 연결의 비밀이 아닌
version header를 `X-MCP-Toolsets: context,repos,issues,pull_requests,actions`로 설정하고 재발견한다.
Agent의 MCP 바인딩 헤더를 `X-MCP-Toolsets: context,repos,issues,pull_requests,actions`로 설정하고 재발견한다.
Workspace가 Git 게시·배포를 담당하는 기본 프로필에는 `X-MCP-Readonly: true`도 설정한다.
모델·도구 선택을 수정해도 이 헤더를 유지한다. mcp.json 동기화가 소유하지 않는 설치 설정이다. 계정·토큰·OAuth scope는 복사하거나 확대하지 않는다.

Expand All @@ -61,7 +61,7 @@ base_branch를 검사한다. 이름이 허용 목록에 있다는 이유로 바
## 실제 가능한 실행 범위

- 새 Workspace를 만들기 전에 options.current_workspace를 확인한다. 후속 요청은 run 또는 prepare_git다.
- Runtime 지정이 없으면 options.default_runtime을 따른다. 사용할 수 없는 기본값은 Models·프로젝트 설정에서 수정한다.
- Runtime 지정이 없으면 options.default_runtime을 따른다. 사용할 수 없는 기본값은 Models·Agent 설정에서 수정한다.
이미 주어진 셸 스크립트·검증된 짧은 명령에는 command를 사용한다. CLI 프로젝트 생성도 자연어 코딩 작업이다.
- PR 리뷰·CI 조사만으로 충분한 작업에는 Sandbox를 만들지 않는다. 재현이 필요하면 실제 HEAD를 확인한다.
- start는 branch 기반 clone이다. 임의 SHA checkout, 허용되지 않은 fork, 다른 Runtime으로 전환하는 기능은 없다.
Expand All @@ -77,8 +77,8 @@ base_branch를 검사한다. 이름이 허용 목록에 있다는 이유로 바

## GitHub Webhook

프로젝트 Settings의 Webhook URL을 GitHub Payload URL로 사용하고 Content type은 application/json으로
설정한다. 프로젝트가 발급한 시크릿을 GitHub Secret에 넣으면 서명으로 인증하므로 커스텀 헤더가 필요 없다.
Agent Settings의 Webhook URL을 GitHub Payload URL로 사용하고 Content type은 application/json으로
설정한다. Agent가 발급한 시크릿을 GitHub Secret에 넣으면 서명으로 인증하므로 커스텀 헤더가 필요 없다.
202는 접수 결과이며 실제 응답은 Trigger 이력에서 확인한다. Webhook은 machine actor로 실행되며
개인 사용자 Workspace 실행 권한이나 Git 승인 권한을 자동으로 얻지 않는다.

Expand Down
2 changes: 1 addition & 1 deletion docs/code-review-agent.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ GitHub 저장소에서 Payload URL을 `/api/webhook/{project}`로, Content type
등록한다. 시크릿은 저장소 파일·Agent 프롬프트·PR·로그에 넣지 않는다.
저장소를 읽을 수 있어도 Pull requests 쓰기 권한이 없으면 댓글 게시가 실패한다.

Studio가 서명·저장소·PR·HEAD를 검증하고 제공한 변경 내용으로 Agent를 실행한 후
호스트 앱이 서명·저장소·PR·HEAD를 검증하고 제공한 변경 내용으로 Agent를 실행한 후
해당 커밋에 COMMENT 리뷰를 게시한다. Agent가 댓글 도구나 게시 위치를 고르지 않으며
이 모드에는 Skill 읽기만 제공된다. 변경 코드 실행·PR 승인·merge·배포는 포함하지 않는다.
최대 파일 수·diff 문맥 한도와 누락 여부는 실제 실행 입력과 게시 본문에 표시된다.
Expand Down
Loading
Loading