diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index b4c5cce..c45916e 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -6,7 +6,7 @@ "email": "support@alignbase.com" }, "metadata": { - "version": "1.3.2" + "version": "1.4.0" }, "plugins": [ { diff --git a/.cursor-plugin/marketplace.json b/.cursor-plugin/marketplace.json index 914b38f..08869d8 100644 --- a/.cursor-plugin/marketplace.json +++ b/.cursor-plugin/marketplace.json @@ -6,7 +6,7 @@ }, "metadata": { "description": "The official Alignbase plugin marketplace.", - "version": "1.3.2" + "version": "1.4.0" }, "plugins": [ { diff --git a/.grok-plugin/marketplace.json b/.grok-plugin/marketplace.json index f77a991..20d097d 100644 --- a/.grok-plugin/marketplace.json +++ b/.grok-plugin/marketplace.json @@ -6,7 +6,7 @@ "email": "support@alignbase.com" }, "metadata": { - "version": "1.3.2" + "version": "1.4.0" }, "plugins": [ { diff --git a/README.md b/README.md index 86da992..32f8b14 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ codex plugin marketplace add Alignbase/alignbase-marketplace && codex plugin add alignbase@alignbase ``` -The repository plugin connects directly to the Alignbase remote MCP server with OAuth. Enable the plugin, connect when prompted, and sign in to Alignbase. It does not depend on the public directory submission. In Codex, approve the startup hook and begin a new session. +The ChatGPT/Codex repository plugin uses the official Alignbase app connection. Enable the plugin, connect the app when prompted, and sign in to Alignbase. In Codex, review and trust the lifecycle hooks, then begin a new session. Version 1.4.0 removes the bundled direct-MCP connection; remove any separately configured Alignbase MCP connection after verifying the app works to avoid duplicate tools and capture. ## Claude @@ -31,7 +31,7 @@ claude Connect the Alignbase MCP server when prompted, sign in, and start a new Cowork or Claude Code session. -Version 1.3.2 uses `https://app.alignbase.com/mcp`. Existing plugin installs +Version 1.4.0 uses `https://app.alignbase.com/mcp`. Existing plugin installs using `https://app.alignbase.ai/mcp` continue to work while teams upgrade. ## Cursor diff --git a/SUBMISSION.md b/SUBMISSION.md index ef53780..d68c7b1 100644 --- a/SUBMISSION.md +++ b/SUBMISSION.md @@ -6,7 +6,7 @@ Reviewed against the public store documentation on September 27, 2026. The four packages have store-native manifests, dynamic OAuth configuration, the same 400 by 400 Alignbase logo with a blue background, and public source paths in this repository. Codex uses the PNG from its `interface` metadata, and Cursor uses the repo-relative SVG from both its marketplace entry and plugin manifest. Claude's plugin manifest now points to a bundled 1024 by 1024 PNG and includes policy links. The existing Claude directory submission has the same PNG uploaded separately and waiting for review; listing fields captured at submission do not update from later source changes. -The Alignbase OpenAI app submission, `asdk_app_6ac6fb6d7d908191a720e44866608dca`, is pending review. The repository plugin connects directly to the MCP endpoint with OAuth and does not reference the submission. It retains lifecycle hooks for supported hosts. Public directory submissions cannot include lifecycle hooks. +The ChatGPT/Codex repository plugin references the live Alignbase app, `asdk_app_6ac6fb6d7d908191a720e44866608dca`. Its Activity definition matches the approved published version. It retains lifecycle hooks for supported hosts. Public directory submissions cannot include lifecycle hooks. The public terms, privacy, and support pages were checked again on September 27, 2026. The Claude developer portal accepted the public plugin source in its initial validation. Before submission, connect GitHub to the submitting Claude organization, verify the existing sample-data reviewer account, and complete the policy acknowledgements with an authorized company representative. Section 2F warrants a transparent description of the startup context behavior for Anthropic's review. @@ -80,7 +80,7 @@ One submitted app is pending review for the universal directory shared by ChatGP | Countries and regions | Select only markets covered by Alignbase's terms, privacy policy, support, and export review | | Release notes | Initial submission of Alignbase. Loads approved context and Skills assigned to an agent and provides permission-scoped MCP tools for reading, drafting, writing, and publishing Alignbase context. OAuth uses dynamic client registration and PKCE. No UI is included. | -The repository package manifest is `plugins/codex/alignbase/.codex-plugin/plugin.json`. It points to `.mcp.json` and the square PNG. Codex discovers lifecycle hooks from `hooks/hooks.json`. This repository package is separate from the in-review MCP submission and is the preferred installation path when hooks are needed. Do not upload its hooks to the public directory. The public directory has its own logo upload in the OpenAI submission form. +The repository package manifest is `plugins/codex/alignbase/.codex-plugin/plugin.json`. It points to `.app.json` and the square PNG, without a separate bundled MCP server. Codex discovers lifecycle hooks from `hooks/hooks.json`. This repository package is distributed through this marketplace and is the preferred installation path when hooks are needed. Do not upload its hooks to the public directory. The public directory has its own logo upload in the OpenAI submission form. ### Starter prompts diff --git a/plugins/claude/alignbase/.claude-plugin/plugin.json b/plugins/claude/alignbase/.claude-plugin/plugin.json index aba9278..2d3df85 100644 --- a/plugins/claude/alignbase/.claude-plugin/plugin.json +++ b/plugins/claude/alignbase/.claude-plugin/plugin.json @@ -2,7 +2,7 @@ "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "alignbase", "displayName": "Alignbase", - "version": "1.3.2", + "version": "1.4.0", "description": "Access workspace-approved Knowledge, Skills, and Memory from Alignbase.", "author": { "name": "Alignbase", diff --git a/plugins/claude/alignbase/README.md b/plugins/claude/alignbase/README.md index 56c4a3e..ecd72ca 100644 --- a/plugins/claude/alignbase/README.md +++ b/plugins/claude/alignbase/README.md @@ -14,7 +14,7 @@ Try these requests after connecting an agent that has sample Knowledge and Skill Support: . Privacy: . Terms: . -Version 1.3.2 records tool and lifecycle metadata through supported host hooks. +Version 1.4.0 records tool and lifecycle metadata through supported host hooks. No separate collector installation is required. Token and cost collection is not enabled. On newer Claude Code versions, subagents return reports through SubagentHandback. diff --git a/plugins/claude/alignbase/hooks/hooks.json b/plugins/claude/alignbase/hooks/hooks.json index 9e72751..49e394f 100644 --- a/plugins/claude/alignbase/hooks/hooks.json +++ b/plugins/claude/alignbase/hooks/hooks.json @@ -1 +1 @@ -{"description":"Load Alignbase context and report Claude Code activity through authenticated lifecycle hooks.","hooks":{"SessionStart":[{"matcher":"startup|resume|clear|compact|fork","hooks":[{"type":"mcp_tool","server":"plugin:alignbase:alignbase","tool":"start_hook_session","input":{"integration":"claude","adapter_version":"1.3.2","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event","context_prompt_retry"],"session_id":"${session_id}","delivery_point":"session_start"},"timeout":30,"statusMessage":"Loading Alignbase context"}]}],"UserPromptSubmit":[{"hooks":[{"type":"mcp_tool","server":"plugin:alignbase:alignbase","tool":"start_hook_session","input":{"integration":"claude","adapter_version":"1.3.2","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event","context_prompt_retry"],"session_id":"${session_id}","delivery_point":"user_prompt_submit"},"timeout":30,"statusMessage":"Loading Alignbase context"},{"type":"mcp_tool","server":"plugin:alignbase:alignbase","tool":"record_hook_activity_event","input":{"integration":"claude","adapter_version":"1.3.2","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event","context_prompt_retry"],"event":{"schema_version":"1","event_type":"prompt.submitted","session_id":"${session_id}","source":"user_prompt_submit","completeness":"complete","prompt_text":"${prompt}"}},"timeout":30,"statusMessage":"Recording Alignbase activity"}]}],"Stop":[{"hooks":[{"type":"mcp_tool","server":"plugin:alignbase:alignbase","tool":"record_hook_activity_event","input":{"integration":"claude","adapter_version":"1.3.2","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event","context_prompt_retry"],"event":{"schema_version":"1","event_type":"response.final","session_id":"${session_id}","source":"stop","completeness":"complete","response_text":"${last_assistant_message}"}},"timeout":30,"statusMessage":"Recording Alignbase activity"}]}],"SubagentStart":[{"hooks":[{"type":"mcp_tool","server":"plugin:alignbase:alignbase","tool":"record_hook_activity_event","input":{"integration":"claude","adapter_version":"1.3.2","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event","context_prompt_retry"],"event":{"schema_version":"1","event_type":"subagent.started","session_id":"${session_id}","actor_id":"${agent_id}","actor_type":"${agent_type}","parent_session_id":"${session_id}","source":"subagent_start","completeness":"complete"}},"timeout":30,"statusMessage":"Recording Alignbase subagent"}]}],"SubagentStop":[{"hooks":[{"type":"mcp_tool","server":"plugin:alignbase:alignbase","tool":"record_hook_activity_event","input":{"integration":"claude","adapter_version":"1.3.2","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event","context_prompt_retry"],"event":{"schema_version":"1","event_type":"response.final","session_id":"${session_id}","actor_id":"${agent_id}","actor_type":"${agent_type}","parent_session_id":"${session_id}","source":"subagent_stop","completeness":"complete","response_text":"${last_assistant_message}"}},"timeout":30,"statusMessage":"Recording Alignbase subagent"}]}],"PreToolUse":[{"hooks":[{"type":"mcp_tool","server":"plugin:alignbase:alignbase","tool":"record_hook_activity_event","input":{"integration":"claude","adapter_version":"1.3.2","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event","context_prompt_retry"],"event":{"schema_version":"1","event_type":"tool.started","session_id":"${session_id}","source":"pre_tool_use","completeness":"partial","observation":{"tool_call_id":"${tool_use_id}","tool_name":"${tool_name}"}},"actor_id":"${agent_id}","actor_type":"${agent_type}","parent_session_id":"${session_id}"},"timeout":10,"statusMessage":"Recording Alignbase activity"}],"matcher":"^(?!.*(?:record_hook_activity_event|start_hook_session|record_activity_event)).*"}],"PostToolUse":[{"hooks":[{"type":"mcp_tool","server":"plugin:alignbase:alignbase","tool":"record_hook_activity_event","input":{"integration":"claude","adapter_version":"1.3.2","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event","context_prompt_retry"],"event":{"schema_version":"1","event_type":"tool.finished","session_id":"${session_id}","source":"post_tool_use","completeness":"partial","observation":{"tool_call_id":"${tool_use_id}","tool_name":"${tool_name}","outcome":"success"}},"actor_id":"${agent_id}","actor_type":"${agent_type}","parent_session_id":"${session_id}"},"timeout":10,"statusMessage":"Recording Alignbase activity"}],"matcher":"^(?!.*(?:record_hook_activity_event|start_hook_session|record_activity_event)).*"},{"matcher":"^SubagentHandback$","hooks":[{"type":"mcp_tool","server":"plugin:alignbase:alignbase","tool":"record_hook_activity_event","input":{"integration":"claude","adapter_version":"1.3.2","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event","context_prompt_retry"],"event":{"schema_version":"1","event_type":"response.final","session_id":"${session_id}","actor_id":"${agent_id}","actor_type":"${agent_type}","parent_session_id":"${session_id}","source":"subagent_handback","completeness":"complete","response_text":"${tool_input.message}","event_id":"handback:${tool_use_id}"}},"timeout":30,"statusMessage":"Recording Alignbase subagent"}]}],"PostToolUseFailure":[{"hooks":[{"type":"mcp_tool","server":"plugin:alignbase:alignbase","tool":"record_hook_activity_event","input":{"integration":"claude","adapter_version":"1.3.2","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event","context_prompt_retry"],"event":{"schema_version":"1","event_type":"tool.finished","session_id":"${session_id}","source":"post_tool_use_failure","completeness":"partial","observation":{"tool_call_id":"${tool_use_id}","tool_name":"${tool_name}","outcome":"error"}},"actor_id":"${agent_id}","actor_type":"${agent_type}","parent_session_id":"${session_id}"},"timeout":10,"statusMessage":"Recording Alignbase activity"}],"matcher":"^(?!.*(?:record_hook_activity_event|start_hook_session|record_activity_event)).*"}],"SessionEnd":[{"hooks":[{"type":"mcp_tool","server":"plugin:alignbase:alignbase","tool":"record_hook_activity_event","input":{"integration":"claude","adapter_version":"1.3.2","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event","context_prompt_retry"],"event":{"schema_version":"1","event_type":"session.ended","session_id":"${session_id}","source":"session_end","completeness":"partial"}},"timeout":10,"statusMessage":"Recording Alignbase activity"}]}],"PreCompact":[{"hooks":[{"type":"mcp_tool","server":"plugin:alignbase:alignbase","tool":"record_hook_activity_event","input":{"integration":"claude","adapter_version":"1.3.2","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event","context_prompt_retry"],"event":{"schema_version":"1","event_type":"context.compacted","session_id":"${session_id}","source":"pre_compact","completeness":"partial","observation":{"trigger":"${trigger}"}}},"timeout":10,"statusMessage":"Recording Alignbase activity"}]}],"PermissionRequest":[{"hooks":[{"type":"mcp_tool","server":"plugin:alignbase:alignbase","tool":"record_hook_activity_event","input":{"integration":"claude","adapter_version":"1.3.2","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event","context_prompt_retry"],"event":{"schema_version":"1","event_type":"permission.requested","session_id":"${session_id}","source":"permission_request","completeness":"partial","observation":{"tool_call_id":"${tool_use_id}","tool_name":"${tool_name}","permission_mode":"${permission_mode}"}}},"timeout":10,"statusMessage":"Recording Alignbase activity"}]}],"PostModelSwitch":[{"hooks":[{"type":"mcp_tool","server":"plugin:alignbase:alignbase","tool":"record_hook_activity_event","input":{"integration":"claude","adapter_version":"1.3.2","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event","context_prompt_retry"],"event":{"schema_version":"1","event_type":"model.changed","session_id":"${session_id}","source":"model_switch","completeness":"partial","observation":{"model":"${to_model}"}}},"timeout":10,"statusMessage":"Recording Alignbase activity"}]}]}} +{"description":"Load Alignbase context and report Claude Code activity through authenticated lifecycle hooks.","hooks":{"SessionStart":[{"matcher":"startup|resume|clear|compact|fork","hooks":[{"type":"mcp_tool","server":"plugin:alignbase:alignbase","tool":"start_hook_session","input":{"integration":"claude","adapter_version":"1.4.0","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event","context_prompt_retry"],"session_id":"${session_id}","delivery_point":"session_start"},"timeout":30,"statusMessage":"Loading Alignbase context"}]}],"UserPromptSubmit":[{"hooks":[{"type":"mcp_tool","server":"plugin:alignbase:alignbase","tool":"start_hook_session","input":{"integration":"claude","adapter_version":"1.4.0","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event","context_prompt_retry"],"session_id":"${session_id}","delivery_point":"user_prompt_submit"},"timeout":30,"statusMessage":"Loading Alignbase context"},{"type":"mcp_tool","server":"plugin:alignbase:alignbase","tool":"record_hook_activity_event","input":{"integration":"claude","adapter_version":"1.4.0","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event","context_prompt_retry"],"event":{"schema_version":"1","event_type":"prompt.submitted","session_id":"${session_id}","source":"user_prompt_submit","completeness":"complete","prompt_text":"${prompt}"}},"timeout":30,"statusMessage":"Recording Alignbase activity"}]}],"Stop":[{"hooks":[{"type":"mcp_tool","server":"plugin:alignbase:alignbase","tool":"record_hook_activity_event","input":{"integration":"claude","adapter_version":"1.4.0","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event","context_prompt_retry"],"event":{"schema_version":"1","event_type":"response.final","session_id":"${session_id}","source":"stop","completeness":"complete","response_text":"${last_assistant_message}"}},"timeout":30,"statusMessage":"Recording Alignbase activity"}]}],"SubagentStart":[{"hooks":[{"type":"mcp_tool","server":"plugin:alignbase:alignbase","tool":"record_hook_activity_event","input":{"integration":"claude","adapter_version":"1.4.0","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event","context_prompt_retry"],"event":{"schema_version":"1","event_type":"subagent.started","session_id":"${session_id}","actor_id":"${agent_id}","actor_type":"${agent_type}","parent_session_id":"${session_id}","source":"subagent_start","completeness":"complete"}},"timeout":30,"statusMessage":"Recording Alignbase subagent"}]}],"SubagentStop":[{"hooks":[{"type":"mcp_tool","server":"plugin:alignbase:alignbase","tool":"record_hook_activity_event","input":{"integration":"claude","adapter_version":"1.4.0","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event","context_prompt_retry"],"event":{"schema_version":"1","event_type":"response.final","session_id":"${session_id}","actor_id":"${agent_id}","actor_type":"${agent_type}","parent_session_id":"${session_id}","source":"subagent_stop","completeness":"complete","response_text":"${last_assistant_message}"}},"timeout":30,"statusMessage":"Recording Alignbase subagent"}]}],"PreToolUse":[{"hooks":[{"type":"mcp_tool","server":"plugin:alignbase:alignbase","tool":"record_hook_activity_event","input":{"integration":"claude","adapter_version":"1.4.0","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event","context_prompt_retry"],"event":{"schema_version":"1","event_type":"tool.started","session_id":"${session_id}","source":"pre_tool_use","completeness":"partial","observation":{"tool_call_id":"${tool_use_id}","tool_name":"${tool_name}"}},"actor_id":"${agent_id}","actor_type":"${agent_type}","parent_session_id":"${session_id}"},"timeout":10,"statusMessage":"Recording Alignbase activity"}],"matcher":"^(?!.*(?:record_hook_activity_event|start_hook_session|record_activity_event)).*"}],"PostToolUse":[{"hooks":[{"type":"mcp_tool","server":"plugin:alignbase:alignbase","tool":"record_hook_activity_event","input":{"integration":"claude","adapter_version":"1.4.0","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event","context_prompt_retry"],"event":{"schema_version":"1","event_type":"tool.finished","session_id":"${session_id}","source":"post_tool_use","completeness":"partial","observation":{"tool_call_id":"${tool_use_id}","tool_name":"${tool_name}","outcome":"success"}},"actor_id":"${agent_id}","actor_type":"${agent_type}","parent_session_id":"${session_id}"},"timeout":10,"statusMessage":"Recording Alignbase activity"}],"matcher":"^(?!.*(?:record_hook_activity_event|start_hook_session|record_activity_event)).*"},{"matcher":"^SubagentHandback$","hooks":[{"type":"mcp_tool","server":"plugin:alignbase:alignbase","tool":"record_hook_activity_event","input":{"integration":"claude","adapter_version":"1.4.0","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event","context_prompt_retry"],"event":{"schema_version":"1","event_type":"response.final","session_id":"${session_id}","actor_id":"${agent_id}","actor_type":"${agent_type}","parent_session_id":"${session_id}","source":"subagent_handback","completeness":"complete","response_text":"${tool_input.message}","event_id":"handback:${tool_use_id}"}},"timeout":30,"statusMessage":"Recording Alignbase subagent"}]}],"PostToolUseFailure":[{"hooks":[{"type":"mcp_tool","server":"plugin:alignbase:alignbase","tool":"record_hook_activity_event","input":{"integration":"claude","adapter_version":"1.4.0","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event","context_prompt_retry"],"event":{"schema_version":"1","event_type":"tool.finished","session_id":"${session_id}","source":"post_tool_use_failure","completeness":"partial","observation":{"tool_call_id":"${tool_use_id}","tool_name":"${tool_name}","outcome":"error"}},"actor_id":"${agent_id}","actor_type":"${agent_type}","parent_session_id":"${session_id}"},"timeout":10,"statusMessage":"Recording Alignbase activity"}],"matcher":"^(?!.*(?:record_hook_activity_event|start_hook_session|record_activity_event)).*"}],"SessionEnd":[{"hooks":[{"type":"mcp_tool","server":"plugin:alignbase:alignbase","tool":"record_hook_activity_event","input":{"integration":"claude","adapter_version":"1.4.0","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event","context_prompt_retry"],"event":{"schema_version":"1","event_type":"session.ended","session_id":"${session_id}","source":"session_end","completeness":"partial"}},"timeout":10,"statusMessage":"Recording Alignbase activity"}]}],"PreCompact":[{"hooks":[{"type":"mcp_tool","server":"plugin:alignbase:alignbase","tool":"record_hook_activity_event","input":{"integration":"claude","adapter_version":"1.4.0","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event","context_prompt_retry"],"event":{"schema_version":"1","event_type":"context.compacted","session_id":"${session_id}","source":"pre_compact","completeness":"partial","observation":{"trigger":"${trigger}"}}},"timeout":10,"statusMessage":"Recording Alignbase activity"}]}],"PermissionRequest":[{"hooks":[{"type":"mcp_tool","server":"plugin:alignbase:alignbase","tool":"record_hook_activity_event","input":{"integration":"claude","adapter_version":"1.4.0","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event","context_prompt_retry"],"event":{"schema_version":"1","event_type":"permission.requested","session_id":"${session_id}","source":"permission_request","completeness":"partial","observation":{"tool_call_id":"${tool_use_id}","tool_name":"${tool_name}","permission_mode":"${permission_mode}"}}},"timeout":10,"statusMessage":"Recording Alignbase activity"}]}],"PostModelSwitch":[{"hooks":[{"type":"mcp_tool","server":"plugin:alignbase:alignbase","tool":"record_hook_activity_event","input":{"integration":"claude","adapter_version":"1.4.0","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event","context_prompt_retry"],"event":{"schema_version":"1","event_type":"model.changed","session_id":"${session_id}","source":"model_switch","completeness":"partial","observation":{"model":"${to_model}"}}},"timeout":10,"statusMessage":"Recording Alignbase activity"}]}]}} diff --git a/plugins/codex/alignbase/.app.json b/plugins/codex/alignbase/.app.json new file mode 100644 index 0000000..077774b --- /dev/null +++ b/plugins/codex/alignbase/.app.json @@ -0,0 +1,8 @@ +{ + "apps": { + "Alignbase": { + "id": "asdk_app_6ac6fb6d7d908191a720e44866608dca", + "required": true + } + } +} diff --git a/plugins/codex/alignbase/.codex-plugin/plugin.json b/plugins/codex/alignbase/.codex-plugin/plugin.json index 70bc647..761f9fb 100644 --- a/plugins/codex/alignbase/.codex-plugin/plugin.json +++ b/plugins/codex/alignbase/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "alignbase", - "version": "1.3.2", + "version": "1.4.0", "description": "Load approved Alignbase context and record agent activity with native hooks.", "author": { "name": "Alignbase", @@ -19,7 +19,7 @@ "interface": { "displayName": "Alignbase", "shortDescription": "Your team's approved context.", - "longDescription": "Connect ChatGPT and Codex to the context and Skills assigned to the current agent in Alignbase. MCP tools load or manage Alignbase context when the agent has permission. In Codex, user-approved lifecycle hooks load context and report turns and subagent relationships through the authenticated Alignbase MCP connection.", + "longDescription": "Connect ChatGPT and Codex to the context and Skills assigned to the current agent through the official Alignbase app. In Codex, user-approved lifecycle hooks load context and record Activity through the same authenticated app connection.", "developerName": "Alignbase", "category": "Productivity", "capabilities": [ @@ -40,5 +40,5 @@ "composerIcon": "./assets/alignbase-logo.png", "logo": "./assets/alignbase-logo.png" }, - "mcpServers": "./.mcp.json" + "apps": "./.app.json" } diff --git a/plugins/codex/alignbase/.mcp.json b/plugins/codex/alignbase/.mcp.json deleted file mode 100644 index 699c08f..0000000 --- a/plugins/codex/alignbase/.mcp.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "mcpServers": { - "alignbase": { - "url": "https://app.alignbase.com/mcp" - } - } -} diff --git a/plugins/codex/alignbase/README.md b/plugins/codex/alignbase/README.md index d3247ed..b96f4f2 100644 --- a/plugins/codex/alignbase/README.md +++ b/plugins/codex/alignbase/README.md @@ -1,16 +1,18 @@ # Alignbase for ChatGPT and Codex -Install and enable the Alignbase plugin from the repository marketplace. Connect its remote MCP server and sign in to Alignbase when prompted. The package connects directly to `https://app.alignbase.com/mcp` using OAuth and does not require the public directory app. +Install and enable the Alignbase plugin from the repository marketplace. Connect the official Alignbase app and sign in when prompted. This package requires the live Alignbase app, `asdk_app_6ac6fb6d7d908191a720e44866608dca`, and bundles no separate direct-MCP connection. -In Codex desktop, review and trust the lifecycle hooks, then start a new session. On supported hosts, the hooks load assigned context and report prompts, final responses, and subagent relationships when Activity is enabled. Hosts without lifecycle hooks can use the MCP tools directly. +In Codex desktop, review and trust the lifecycle hooks, then start a new session. On supported hosts, the hooks load assigned context and report prompts, final responses, and subagent relationships when Activity is enabled. Hosts without lifecycle hooks can use the app tools. Native hook sessions leave Activity recording to hooks, preventing duplicate model-mediated capture. The plugin loads the context and Skills assigned to the current agent. Read access works for every connected agent. Write and publish tools only work when the agent has the matching Alignbase permission. -If setup fails, check that your host supports repository plugins with remote MCP servers and that workspace policy permits the connection, then retry OAuth. In Codex, also review the lifecycle hooks and start a new session. +If setup fails, check that the official Alignbase app is available and connected, and that workspace policy permits it. In Codex, also review the lifecycle hooks and start a new session. -The public directory submission is a separate MCP distribution path. OpenAI currently excludes lifecycle hooks from directory submissions. +When upgrading from a direct-MCP install, remove any separately configured Alignbase MCP connection after confirming the app is connected. Refresh the marketplace, upgrade the plugin, review the changed hooks, and begin a new session. The package retains hooks for supported local Codex sessions; OpenAI directory packages exclude them. Support: . Privacy: . Terms: . -Version 1.3.2 records tool and lifecycle metadata through supported host hooks. +Version 1.4.0 records tool and lifecycle metadata through supported host hooks. No separate collector installation is required. Token and cost collection is not enabled. + +Use a Codex runtime with MCP tool-hook support. Older runtimes may reject these hooks. Codex currently skips SessionEnd MCP hooks, so session-end capture remains incomplete. diff --git a/plugins/codex/alignbase/hooks/hooks.json b/plugins/codex/alignbase/hooks/hooks.json index bd445e7..0daf6ae 100644 --- a/plugins/codex/alignbase/hooks/hooks.json +++ b/plugins/codex/alignbase/hooks/hooks.json @@ -1 +1 @@ -{"description":"Load Alignbase context and report Codex activity through authenticated lifecycle hooks.","hooks":{"SessionStart":[{"matcher":"startup|resume|clear|compact","hooks":[{"type":"mcp_tool","server":"alignbase","tool":"start_hook_session","input":{"integration":"codex","adapter_version":"1.3.2","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event"],"session_id":"${session_id}","delivery_point":"session_start"},"timeout":30,"statusMessage":"Loading Alignbase context"},{"type":"command","command":"\"$PLUGIN_ROOT/scripts/session-start.sh\"","commandWindows":"powershell -NoProfile -ExecutionPolicy Bypass -File \"$env:PLUGIN_ROOT\\scripts\\session-start.ps1\"","timeout":10,"statusMessage":"Checking Alignbase startup"}]}],"UserPromptSubmit":[{"hooks":[{"type":"mcp_tool","server":"alignbase","tool":"record_hook_activity_event","input":{"integration":"codex","adapter_version":"1.3.2","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event"],"event":{"schema_version":"1","event_type":"prompt.submitted","session_id":"${session_id}","turn_id":"${turn_id}","source":"user_prompt_submit","completeness":"complete","prompt_text":"${prompt}"}},"timeout":30,"statusMessage":"Recording Alignbase activity"}]}],"Stop":[{"hooks":[{"type":"mcp_tool","server":"alignbase","tool":"record_hook_activity_event","input":{"integration":"codex","adapter_version":"1.3.2","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event"],"event":{"schema_version":"1","event_type":"response.final","session_id":"${session_id}","turn_id":"${turn_id}","source":"stop","completeness":"complete","response_text":"${last_assistant_message}"}},"timeout":30,"statusMessage":"Recording Alignbase activity"}]}],"SubagentStart":[{"hooks":[{"type":"mcp_tool","server":"alignbase","tool":"record_hook_activity_event","input":{"integration":"codex","adapter_version":"1.3.2","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event"],"event":{"schema_version":"1","event_type":"subagent.started","session_id":"${session_id}","turn_id":"${turn_id}","actor_id":"${agent_id}","actor_type":"${agent_type}","parent_session_id":"${session_id}","source":"subagent_start","completeness":"complete"}},"timeout":30,"statusMessage":"Recording Alignbase subagent"}]}],"SubagentStop":[{"hooks":[{"type":"mcp_tool","server":"alignbase","tool":"record_hook_activity_event","input":{"integration":"codex","adapter_version":"1.3.2","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event"],"event":{"schema_version":"1","event_type":"response.final","session_id":"${session_id}","turn_id":"${turn_id}","actor_id":"${agent_id}","actor_type":"${agent_type}","parent_session_id":"${session_id}","source":"subagent_stop","completeness":"complete","response_text":"${last_assistant_message}"}},"timeout":30,"statusMessage":"Recording Alignbase subagent"}]}],"PreToolUse":[{"hooks":[{"type":"mcp_tool","server":"alignbase","tool":"record_hook_activity_event","input":{"integration":"codex","adapter_version":"1.3.2","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event"],"event":{"schema_version":"1","event_type":"tool.started","session_id":"${session_id}","source":"pre_tool_use","completeness":"partial","turn_id":"${turn_id}","observation":{"tool_call_id":"${tool_use_id}","tool_name":"${tool_name}","model":"${model}","permission_mode":"${permission_mode}"}}},"timeout":10,"statusMessage":"Recording Alignbase activity"}],"matcher":"*"}],"PostToolUse":[{"hooks":[{"type":"mcp_tool","server":"alignbase","tool":"record_hook_activity_event","input":{"integration":"codex","adapter_version":"1.3.2","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event"],"event":{"schema_version":"1","event_type":"tool.finished","session_id":"${session_id}","source":"post_tool_use","completeness":"partial","turn_id":"${turn_id}","observation":{"tool_call_id":"${tool_use_id}","tool_name":"${tool_name}","outcome":"unknown","model":"${model}","permission_mode":"${permission_mode}"}}},"timeout":10,"statusMessage":"Recording Alignbase activity"}],"matcher":"*"}],"SessionEnd":[{"hooks":[{"type":"mcp_tool","server":"alignbase","tool":"record_hook_activity_event","input":{"integration":"codex","adapter_version":"1.3.2","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event"],"event":{"schema_version":"1","event_type":"session.ended","session_id":"${session_id}","source":"session_end","completeness":"partial"}},"timeout":3,"statusMessage":"Recording Alignbase activity"}]}],"PreCompact":[{"hooks":[{"type":"mcp_tool","server":"alignbase","tool":"record_hook_activity_event","input":{"integration":"codex","adapter_version":"1.3.2","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event"],"event":{"schema_version":"1","event_type":"context.compacted","session_id":"${session_id}","source":"pre_compact","completeness":"partial","observation":{"trigger":"${trigger}"}}},"timeout":10,"statusMessage":"Recording Alignbase activity"}]}],"PermissionRequest":[{"hooks":[{"type":"mcp_tool","server":"alignbase","tool":"record_hook_activity_event","input":{"integration":"codex","adapter_version":"1.3.2","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event"],"event":{"schema_version":"1","event_type":"permission.requested","session_id":"${session_id}","source":"permission_request","completeness":"partial","turn_id":"${turn_id}","observation":{"tool_call_id":"${tool_use_id}","tool_name":"${tool_name}","permission_mode":"${permission_mode}","model":"${model}"}}},"timeout":10,"statusMessage":"Recording Alignbase activity"}],"matcher":"*"}],"Interrupt":[{"hooks":[{"type":"mcp_tool","server":"alignbase","tool":"record_hook_activity_event","input":{"integration":"codex","adapter_version":"1.3.2","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event"],"event":{"schema_version":"1","event_type":"session.interrupted","session_id":"${session_id}","source":"interrupt","completeness":"partial","turn_id":"${turn_id}","observation":{}}},"timeout":3,"statusMessage":"Recording Alignbase activity"}]}]}} +{"description":"Load Alignbase context and report Codex activity through authenticated lifecycle hooks.","hooks":{"SessionStart":[{"matcher":"startup|resume|clear|compact","hooks":[{"type":"mcp_tool","server":"codex_apps","tool":"alignbase.start_hook_session","input":{"integration":"codex","adapter_version":"1.4.0","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event"],"session_id":"${session_id}","delivery_point":"session_start"},"timeout":30,"statusMessage":"Loading Alignbase context"},{"type":"command","command":"\"$PLUGIN_ROOT/scripts/session-start.sh\"","commandWindows":"powershell -NoProfile -ExecutionPolicy Bypass -File \"$env:PLUGIN_ROOT\\scripts\\session-start.ps1\"","timeout":10,"statusMessage":"Checking Alignbase startup"}]}],"UserPromptSubmit":[{"hooks":[{"type":"mcp_tool","server":"codex_apps","tool":"alignbase.record_hook_activity_event","input":{"integration":"codex","adapter_version":"1.4.0","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event"],"event":{"schema_version":"1","event_type":"prompt.submitted","session_id":"${session_id}","turn_id":"${turn_id}","source":"user_prompt_submit","completeness":"complete","prompt_text":"${prompt}"}},"timeout":30,"statusMessage":"Recording Alignbase activity"}]}],"Stop":[{"hooks":[{"type":"mcp_tool","server":"codex_apps","tool":"alignbase.record_hook_activity_event","input":{"integration":"codex","adapter_version":"1.4.0","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event"],"event":{"schema_version":"1","event_type":"response.final","session_id":"${session_id}","turn_id":"${turn_id}","source":"stop","completeness":"complete","response_text":"${last_assistant_message}"}},"timeout":30,"statusMessage":"Recording Alignbase activity"}]}],"SubagentStart":[{"hooks":[{"type":"mcp_tool","server":"codex_apps","tool":"alignbase.record_hook_activity_event","input":{"integration":"codex","adapter_version":"1.4.0","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event"],"event":{"schema_version":"1","event_type":"subagent.started","session_id":"${session_id}","turn_id":"${turn_id}","actor_id":"${agent_id}","actor_type":"${agent_type}","parent_session_id":"${session_id}","source":"subagent_start","completeness":"complete"}},"timeout":30,"statusMessage":"Recording Alignbase subagent"}]}],"SubagentStop":[{"hooks":[{"type":"mcp_tool","server":"codex_apps","tool":"alignbase.record_hook_activity_event","input":{"integration":"codex","adapter_version":"1.4.0","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event"],"event":{"schema_version":"1","event_type":"response.final","session_id":"${session_id}","turn_id":"${turn_id}","actor_id":"${agent_id}","actor_type":"${agent_type}","parent_session_id":"${session_id}","source":"subagent_stop","completeness":"complete","response_text":"${last_assistant_message}"}},"timeout":30,"statusMessage":"Recording Alignbase subagent"}]}],"PreToolUse":[{"hooks":[{"type":"mcp_tool","server":"codex_apps","tool":"alignbase.record_hook_activity_event","input":{"integration":"codex","adapter_version":"1.4.0","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event"],"event":{"schema_version":"1","event_type":"tool.started","session_id":"${session_id}","source":"pre_tool_use","completeness":"partial","turn_id":"${turn_id}","observation":{"tool_call_id":"${tool_use_id}","tool_name":"${tool_name}","model":"${model}","permission_mode":"${permission_mode}"}}},"timeout":10,"statusMessage":"Recording Alignbase activity"}],"matcher":"*"}],"PostToolUse":[{"hooks":[{"type":"mcp_tool","server":"codex_apps","tool":"alignbase.record_hook_activity_event","input":{"integration":"codex","adapter_version":"1.4.0","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event"],"event":{"schema_version":"1","event_type":"tool.finished","session_id":"${session_id}","source":"post_tool_use","completeness":"partial","turn_id":"${turn_id}","observation":{"tool_call_id":"${tool_use_id}","tool_name":"${tool_name}","outcome":"unknown","model":"${model}","permission_mode":"${permission_mode}"}}},"timeout":10,"statusMessage":"Recording Alignbase activity"}],"matcher":"*"}],"SessionEnd":[{"hooks":[{"type":"mcp_tool","server":"codex_apps","tool":"alignbase.record_hook_activity_event","input":{"integration":"codex","adapter_version":"1.4.0","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event"],"event":{"schema_version":"1","event_type":"session.ended","session_id":"${session_id}","source":"session_end","completeness":"partial"}},"timeout":3,"statusMessage":"Recording Alignbase activity"}]}],"PreCompact":[{"hooks":[{"type":"mcp_tool","server":"codex_apps","tool":"alignbase.record_hook_activity_event","input":{"integration":"codex","adapter_version":"1.4.0","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event"],"event":{"schema_version":"1","event_type":"context.compacted","session_id":"${session_id}","source":"pre_compact","completeness":"partial","observation":{"trigger":"${trigger}"}}},"timeout":10,"statusMessage":"Recording Alignbase activity"}]}],"PermissionRequest":[{"hooks":[{"type":"mcp_tool","server":"codex_apps","tool":"alignbase.record_hook_activity_event","input":{"integration":"codex","adapter_version":"1.4.0","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event"],"event":{"schema_version":"1","event_type":"permission.requested","session_id":"${session_id}","source":"permission_request","completeness":"partial","turn_id":"${turn_id}","observation":{"tool_name":"${tool_name}","permission_mode":"${permission_mode}","model":"${model}"}}},"timeout":10,"statusMessage":"Recording Alignbase activity"}],"matcher":"*"}],"Interrupt":[{"hooks":[{"type":"mcp_tool","server":"codex_apps","tool":"alignbase.record_hook_activity_event","input":{"integration":"codex","adapter_version":"1.4.0","capabilities":["context_session_start","prompt_submit","final_response","subagent_lifecycle","tool_use","lifecycle","session_end_event"],"event":{"schema_version":"1","event_type":"session.interrupted","session_id":"${session_id}","source":"interrupt","completeness":"partial","turn_id":"${turn_id}","observation":{}}},"timeout":3,"statusMessage":"Recording Alignbase activity"}]}]}} diff --git a/plugins/cursor/alignbase/.cursor-plugin/plugin.json b/plugins/cursor/alignbase/.cursor-plugin/plugin.json index 8c9beb0..a8a3b12 100644 --- a/plugins/cursor/alignbase/.cursor-plugin/plugin.json +++ b/plugins/cursor/alignbase/.cursor-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "alignbase", - "version": "1.3.2", + "version": "1.4.0", "description": "Load your team's approved Alignbase context and Skills at session start.", "author": { "name": "Alignbase", diff --git a/plugins/grok/alignbase/plugin.json b/plugins/grok/alignbase/plugin.json index ec77450..c46a8c1 100644 --- a/plugins/grok/alignbase/plugin.json +++ b/plugins/grok/alignbase/plugin.json @@ -1,6 +1,6 @@ { "name": "alignbase", - "version": "1.3.2", + "version": "1.4.0", "description": "Connect Grok to the context and Skills assigned to this agent in Alignbase.", "author": { "name": "Alignbase", diff --git a/scripts/validate.py b/scripts/validate.py index 57ee284..f39a0a4 100644 --- a/scripts/validate.py +++ b/scripts/validate.py @@ -165,8 +165,8 @@ def main() -> None: codex_manifest = read_json("plugins/codex/alignbase/.codex-plugin/plugin.json") assert codex_manifest["name"] == "alignbase" - assert "apps" not in codex_manifest - assert codex_manifest["mcpServers"] == "./.mcp.json" + assert codex_manifest["apps"] == "./.app.json" + assert "mcpServers" not in codex_manifest assert "hooks" not in codex_manifest assert codex_manifest["interface"]["defaultPrompt"] == [ "Load the Alignbase context assigned to this agent.", @@ -178,18 +178,21 @@ def main() -> None: assert codex_manifest["interface"]["composerIcon"] == codex_logo assert_png_logo("plugins/codex/alignbase/assets/alignbase-logo.png") assert_svg_logo("plugins/codex/alignbase/assets/alignbase-logo.svg") - assert_mcp_server("plugins/codex/alignbase/.mcp.json") - codex_servers = read_json("plugins/codex/alignbase/.mcp.json")["mcpServers"] - assert not (ROOT / "plugins/codex/alignbase/.app.json").exists() + assert not (ROOT / "plugins/codex/alignbase/.mcp.json").exists() + assert not (ROOT / "plugins/codex/alignbase/mcp.json").exists() + assert read_json("plugins/codex/alignbase/.app.json") == { + "apps": {"Alignbase": {"id": "asdk_app_6ac6fb6d7d908191a720e44866608dca", "required": True}} + } + codex_servers = {"codex_apps"} codex_hooks = read_json("plugins/codex/alignbase/hooks/hooks.json") codex_lifecycle_hooks = codex_hooks["hooks"] codex_session_hooks = codex_lifecycle_hooks["SessionStart"][0]["hooks"] codex_start_hook = codex_session_hooks[0] assert codex_start_hook["type"] == "mcp_tool" - assert codex_start_hook["server"] == "alignbase" + assert codex_start_hook["server"] == "codex_apps" assert codex_start_hook["server"] in codex_servers - assert codex_start_hook["tool"] == "start_hook_session" + assert codex_start_hook["tool"] == "alignbase.start_hook_session" assert codex_start_hook["input"]["adapter_version"] == codex_manifest["version"] codex_command_hook = codex_session_hooks[1] assert codex_command_hook["command"] == '"$PLUGIN_ROOT/scripts/session-start.sh"' @@ -207,11 +210,18 @@ def main() -> None: "PermissionRequest", "Interrupt", } + # Codex PermissionRequest has no tool_use_id. Template resolution fails + # before the MCP call if the hook references this unavailable field. + permission_hooks = codex_lifecycle_hooks["PermissionRequest"] + assert "${tool_use_id}" not in json.dumps(permission_hooks) + for event_handlers in codex_lifecycle_hooks.values(): for event_handler in event_handlers: for hook in event_handler["hooks"]: if hook["type"] == "mcp_tool": assert hook["server"] in codex_servers + assert hook["tool"] in {"alignbase.start_hook_session", "alignbase.record_hook_activity_event"} + assert hook["input"]["adapter_version"] == codex_manifest["version"] hook_output = subprocess.run( ["sh", str(ROOT / "plugins/codex/alignbase/scripts/session-start.sh")],