ワンクリックで
add-http-client
Add a new external HTTP client with config, endpoints, IO types, and an adapter. Use when integrating a new external API.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Add a new external HTTP client with config, endpoints, IO types, and an adapter. Use when integrating a new external API.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Add a complete REST endpoint from command to controller route. Use when building new API endpoints.
Summarize the API interface changes made during THIS session for the frontend, then optionally spawn an agent to implement them in the frontend repo. Use after changing endpoints, request/response DTOs, or auth.
One-shot guided session — prunes unused code, scaffolds new entities/endpoints, updates project identity config, and replaces the init migration for a specific project.
Compress natural language memory files (CLAUDE.md, todos, preferences) into caveman format to save input tokens. Preserves all technical substance, code, URLs, and structure. Compressed version overwrites the original file. Human-readable backup saved as FILE.original.md. Trigger: /caveman-compress FILEPATH or "compress memory file"
Implement a change with a pipeline scaled to its complexity. Single entry point for all code changes — auto-detects effort or accepts small|mid|tuff override.
Run a Linear task end-to-end — creates an isolated tmux session + worktree, starts a Claude agent to implement it, opens a PR, and watches for review feedback automatically.
| name | add-http-client |
| description | Add a new external HTTP client with config, endpoints, IO types, and an adapter. Use when integrating a new external API. |
| argument-hint | <service-name> |
Create a full external HTTP client integration following the project's layered pattern.
$0 -- Service name (e.g., stripe, twilio, sendgrid)!ls backend/infra/external/http/ 2>/dev/null
backend/infra/external/http/{service}/
├── __init__.py
├── client.py
├── config.py
├── endpoints.py
└── io/
├── __init__.py
└── responses.py
File: backend/infra/external/http/{service}/config.py
from backend.internal.dto import StructDTO
class {Service}Config(StructDTO):
{SERVICE}_BASE_URL: str
{SERVICE}_API_KEY: str
File: backend/infra/external/http/{service}/endpoints.py
from enum import StrEnum
class {Service}Endpoints(StrEnum):
SEND_MESSAGE = "/v1/messages"
GET_STATUS = "/v1/messages/{id}"
File: backend/infra/external/http/{service}/io/responses.py
from backend.internal.dto import StructDTO
class SendMessageResponse(StructDTO):
id: str
status: str
File: backend/infra/external/http/{service}/client.py
from backend.infra.external.http.client import HTTPClient
from backend.internal.result import Result
from .config import {Service}Config
from .endpoints import {Service}Endpoints
from .io.responses import SendMessageResponse
class {Service}Client(HTTPClient[{Service}Config]):
async def send_message(self, *, to: str, body: str) -> Result[SendMessageResponse, ...]:
response = await self._session.post(
{Service}Endpoints.SEND_MESSAGE,
json={"to": to, "body": body},
headers={"Authorization": f"Bearer {self._config.{SERVICE}_API_KEY}"},
)
return response.as_result(SendMessageResponse)
File: backend/infra/external/http/{service}/__init__.py
from .client import {Service}Client
from .config import {Service}Config
__all__ = ("{Service}Client", "{Service}Config")
File: backend/infra/external/adapters/{name}.py
from typing import final
from backend.app.shared.ports.{category}.{port} import {PortName}
from backend.infra.external.http.{service} import {Service}Client
@final
class Impl{Service}{PortName}({PortName}):
def __init__(self, client: {Service}Client) -> None:
self._client = client
async def send(self, *, to: str, message: str) -> None:
(await self._client.send_message(to=to, body=message)).raise_()
File: backend/entry/rest/main/ioc.py
from backend.infra.external.http.sessions.aiohttp import AiohttpConfig, create_aiohttp_session
def _create_{service}_client(config: {Service}Config) -> {Service}Client:
session = create_aiohttp_session(AiohttpConfig(BASE_URL=config.{SERVICE}_BASE_URL))
return {Service}Client(session=session, config=config)
Add to an existing provider or create a new one. Bind adapter to port Protocol.
Run just check.