Token导航 LogoToken导航

Agent Skill · 前端设计

vtex-io-client-integration(vtex io 客户端集成)

vtex-io-client-integration 用于处理 GitHub 仓库、Issue、Pull Request 和代码协作信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要围绕仓库状态、代码变更或协作事项进行整理时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

vtex-io-client-integration 是前端设计类 Agent Skill,可用宿主为 Codex、Claude、Cursor、Gemini CLI,通过GitHub 仓库获取,权限为调用外部服务;许可证信息还不明确,第三方扫描已通过,按安装量在前端设计类的 10,216 个 Skill 里排第 1,807。

总安装 3,770周安装 154GitHub Stars 25下载 1,207核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
unknown

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:vtex-io-client-integration(vtex io 客户端集成)
来源仓库:https://github.com/vtex/skills
仓库路径:skills/vtex-io-client-integration
安装命令:
npx skills add https://github.com/vtex/skills --skill vtex-io-client-integration
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/vtex/skills --skill vtex-io-client-integration

这个 Skill 是做什么的

前端设计类 Skill 关注页面结构、视觉规范和组件写法,输出通常是可运行的界面代码。

vtex-io-client-integration 用于处理 GitHub 仓库、Issue、Pull Request 和代码协作信息。适合在 Codex、Claude、Cursor、Gemini CLI 中围绕仓库状态、代码变更或协作事项进行整理。通过 npx skills add 命令从指定仓库安装并使用该技能。

安装前需确认权限范围、维护状态,避免触发联网或文件读写操作。建议结合原始 README 进一步核验具体用法和功能边界。

来源仓库内路径:skills/vtex-io-client-integration

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 Codex、Claude、Cursor、Gemini CLI;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 npx skills add https://github.com/vtex/skills --skill vtex-io-client-integration;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它需要调用外部服务,先在测试目录或测试账号里跑,确认没问题再放到正式项目。

常见问题

6 条

vtex-io-client-integration 怎么安装?

在终端执行 npx skills add https://github.com/vtex/skills --skill vtex-io-client-integration。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

vtex-io-client-integration 支持哪些 AI 工具?

公开资料标注支持 Codex、Claude、Cursor、Gemini CLI。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

vtex-io-client-integration 需要什么权限?

权限级别是调用外部服务。该 Skill 可能调用第三方服务、云服务或外部模型 API,使用前需要确认账号、额度、数据发送范围和服务条款。

vtex-io-client-integration 是免费的吗?

公开资料没有标注明确许可证,收费和商用限制都无法确认。正式使用前请到来源仓库核对授权说明。

vtex-io-client-integration 用的人多吗?

公开数据是累计安装 3,770 次,近一周安装 154 次,下载 1,207 次,GitHub 25 星。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

vtex-io-client-integration 安全吗?

第三方扫描结果为通过,但这只覆盖已知的静态检查项,不能替代自己读一遍源码和安装命令。

值得选的地方和要先想清楚的地方

值得选的地方

  • 同时适配 4 种工具,换客户端不用重新找替代品。
  • 第三方扫描已通过,常见的高风险行为没有命中。

先想清楚的地方

  • 许可证没有明确标注,能不能商用、能不能再分发都不确定。
  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 Codex,想直接扩展它能力的人。
  • 需要处理前端设计类任务、又不想每次都手写提示词的人。

不太适合

  • 需要明确授权才能用到公司项目里的场景。
  • 需要厂商级技术支持和 SLA 的生产系统。

前端设计类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
frontend-design

前端设计 · Codex、Claude

8,823,360126,072只读MIT通过
vercel-composition-patterns

Vercel 组合模式 · Codex、Claude

3,858,81625,893需要联网MIT通过
vercel-react-native-skills

Vercel React native skills 前端 · Codex、Claude

2,468,66425,878只读MIT通过
adapt

adapt 搜索 · Codex、Claude

2,027,04023,125操作浏览器未明确通过
bolder

bolder 分析 · Codex、Claude

2,004,28823,130只读未明确通过
vtex-io-client-integration

vtex io 客户端集成 · 本页

3,77025调用外部服务未明确通过

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

Client Integration & Service Access

When this skill applies

Use this skill when the main decision is how a VTEX IO backend app should call VTEX services or external APIs through the VTEX IO client system.

  • Creating custom clients under node/clients/
  • Choosing between native clients from @vtex/api or @vtex/clients and a custom client
  • Registering clients in IOClients and exposing them through ctx.clients
  • Configuring InstanceOptions such as retries, timeout, headers, or caching
  • Reviewing backend integrations that currently use raw HTTP libraries

Do not use this skill for:

  • deciding the app contract in manifest.json
  • structuring node/index.ts or tuning service.json
  • designing GraphQL schema or resolver contracts
  • modeling route authorization or security permissions
  • building storefront or admin frontend integrations

Decision rules

  • Prefer native clients from @vtex/api or @vtex/clients when they already cover the target VTEX service. Common examples include clients for catalog, checkout, logistics, and OMS. Write a custom client only when no suitable native client or factory exists.
  • Use ExternalClient primarily for non-VTEX external APIs. Avoid using it for VTEX-hosted endpoints such as *.myvtex.com or *.vtexcommercestable.com.br when a native client in @vtex/clients, JanusClient, or another documented higher-level VTEX client is available or more appropriate.
  • Janus is VTEX's Core Commerce API gateway. Use JanusClient only when you need to call a VTEX Core Commerce API through Janus and no suitable native client from @vtex/clients already exists.
  • Use InfraClient only for advanced integrations with VTEX IO infrastructure services under explicit documented guidance. In partner apps, prefer higher-level clients and factories such as masterData or vbase instead of extending InfraClient directly.
  • Register every custom or native client in node/clients/index.ts through a Clients class that extends IOClients.
  • Consume integrations through ctx.clients, never by instantiating client classes inside middlewares, resolvers, or event handlers.
  • Keep clients focused on transport, request options, endpoint paths, and small response shaping. Keep business rules, authorization decisions, and orchestration outside the client.
  • When building custom clients, always rely on the IOContext passed by VTEX IO such as account, workspace, and available auth tokens instead of hardcoding account names, workspaces, or environment-specific VTEX URLs.
  • Configure shared InstanceOptions in the runtime client config, then use client-specific overrides only when an integration has clearly different needs.
  • Use the metric option on important client calls so integrations can be tracked and monitored at the client layer, not only at the handler layer.
  • Keep error normalization close to the client boundary, but avoid hiding relevant HTTP status codes or transport failures that are important for observability and debugging.
  • When integrating with external services, confirm that the required outbound policies are declared in the app contract, but keep the detailed policy modeling in auth or app-contract skills.
  • In rare migration or legacy scenarios, ExternalClient may temporarily be used against VTEX-hosted endpoints, but treat this as an exception. The long-term goal should be to move toward native clients or the proper documented VTEX client abstractions so routing, authentication, and observability stay consistent.

Client selection guide:

Client typeUse whenAvoid when
ExternalClientcalling non-VTEX external APIsVTEX-hosted APIs that already have a native client or Janus-based abstraction
JanusClientcalling VTEX Core Commerce APIs not yet wrapped by @vtex/clientsany VTEX service that already has a native client such as Catalog, Checkout, Logistics, or OMS
InfraClientimplementing advanced infra-style clients only under explicit documented guidancegeneral VTEX or external APIs in partner apps

InstanceOptions heuristics:

  • Start with small, explicit client defaults such as retries: 2 and a request timeout between 1000 and 3000 milliseconds.
  • Use small finite retry values such as 1 to 3 for idempotent operations.
  • Avoid automatic retries on non-idempotent operations unless the upstream API explicitly documents safe idempotency behavior.
  • Do not use high retry counts to hide upstream instability. Surface repeated failures clearly and handle them intentionally in the business layer.
  • Prefer per-client headers and metrics instead of scattering header definitions through handlers.
  • Use memory or disk cache options only when repeated reads justify it and the response can be safely reused.
  • Keep auth setup inside the client constructor or factory configuration, not duplicated across handlers.

Hard constraints

Constraint: All service-to-service HTTP calls must go through VTEX IO clients

HTTP communication from a VTEX IO backend app MUST go through @vtex/api or @vtex/clients clients. Do not use raw libraries such as axios, fetch, got, or node-fetch for service integrations.

Why this matters

VTEX IO clients provide transport behavior that raw libraries bypass, including authentication context, retries, metrics, caching options, and infrastructure-aware request execution. Raw HTTP calls make integrations harder to observe and easier to misconfigure.

Detection

If you see axios, fetch, got, node-fetch, or direct ad hoc HTTP code in a VTEX IO backend service, STOP and replace it with an appropriate VTEX IO client pattern.

Correct

import type { IOContext, InstanceOptions } from '@vtex/api'
import { ExternalClient } from '@vtex/api'

export class WeatherClient extends ExternalClient {
  constructor(context: IOContext, options?: InstanceOptions) {
    super('https://api.weather.com', context, {
      ...options,
      headers: {
        'X-VTEX-Account': context.account,
        'X-VTEX-Workspace': context.workspace,
        'X-Api-Key': process.env.WEATHER_API_KEY,
        ...options?.headers,
      },
    })
  }

  public getForecast(city: string) {
    return this.http.get(`/v1/forecast/${city}`, {
      metric: 'weather-forecast',
    })
  }
}

Wrong

import axios from 'axios'

export async function getForecast(city: string) {
  const response = await axios.get(`https://api.weather.com/v1/forecast/${city}`, {
    headers: {
      'X-Api-Key': process.env.WEATHER_API_KEY,
    },
  })

  return response.data
}

Constraint: Clients must be registered in IOClients and consumed through ctx.clients

Clients MUST be registered in the Clients class that extends IOClients, and middlewares, resolvers, or event handlers MUST access them through ctx.clients.

Why this matters

The VTEX IO client registry ensures the current request context, options, caching behavior, and instrumentation are applied consistently. Direct instantiation inside handlers bypasses that shared lifecycle and creates fragile integration code.

Detection

If you see new MyClient(...) inside a middleware, resolver, or event handler, STOP. Move the client into node/clients/, register it in IOClients, and consume it through ctx.clients.

Correct

import { IOClients } from '@vtex/api'
import { Catalog } from '@vtex/clients'

export class Clients extends IOClients {
  public get catalog() {
    return this.getOrSet('catalog', Catalog)
  }
}
export async function getSku(ctx: Context) {
  const sku = await ctx.clients.catalog.getSkuById(ctx.vtex.route.params.id)
  ctx.body = sku
}

Wrong

import { Catalog } from '@vtex/clients'

export async function getSku(ctx: Context) {
  const catalog = new Catalog(ctx.vtex, {})
  const sku = await catalog.getSkuById(ctx.vtex.route.params.id)
  ctx.body = sku
}

Constraint: Choose the narrowest client type that matches the integration boundary

Each integration MUST use the correct client abstraction for its boundary. Do not default every integration to ExternalClient or JanusClient when a more specific client type or native package already exists.

Why this matters

The client type communicates intent and shapes how authentication, URLs, and service boundaries are handled. Using the wrong abstraction makes the integration harder to understand and more likely to drift from VTEX IO conventions.

Detection

If the target is a VTEX Core Commerce API, STOP and check whether a native client from @vtex/clients or JanusClient is more appropriate than ExternalClient. If the target is VTEX-hosted, STOP and confirm that there is no more specific documented VTEX client abstraction before defaulting to ExternalClient.

Correct

import type { IOContext, InstanceOptions } from '@vtex/api'
import { JanusClient } from '@vtex/api'

export class RatesAndBenefitsClient extends JanusClient {
  constructor(context: IOContext, options?: InstanceOptions) {
    super(context, options)
  }
}

Wrong

import type { IOContext, InstanceOptions } from '@vtex/api'
import { ExternalClient } from '@vtex/api'

export class RatesAndBenefitsClient extends ExternalClient {
  constructor(context: IOContext, options?: InstanceOptions) {
    super(`https://${context.account}.vtexcommercestable.com.br`, context, options)
  }
}

Preferred pattern

Recommended file layout:

node/
├── clients/
│   ├── index.ts
│   ├── catalog.ts
│   └── partnerApi.ts
├── middlewares/
│   └── getData.ts
└── index.ts

Register native and custom clients in one place:

import { IOClients } from '@vtex/api'
import { Catalog } from '@vtex/clients'
import { PartnerApiClient } from './partnerApi'

export class Clients extends IOClients {
  public get catalog() {
    return this.getOrSet('catalog', Catalog)
  }

  public get partnerApi() {
    return this.getOrSet('partnerApi', PartnerApiClient)
  }
}

Create custom clients with explicit routes and options:

import type { IOContext, InstanceOptions } from '@vtex/api'
import { ExternalClient } from '@vtex/api'

export class PartnerApiClient extends ExternalClient {
  private routes = {
    order: (id: string) => `/orders/${id}`,
  }

  constructor(context: IOContext, options?: InstanceOptions) {
    super('https://partner.example.com', context, {
      ...options,
      retries: 2,
      timeout: 2000,
      headers: {
        'X-VTEX-Account': context.account,
        'X-VTEX-Workspace': context.workspace,
        ...options?.headers,
      },
    })
  }

  public getOrder(id: string) {
    return this.http.get(this.routes.order(id), {
      metric: 'partner-get-order',
    })
  }
}

Wire shared client options in the runtime:

import type { ClientsConfig } from '@vtex/api'
import { Clients } from './clients'

const clients: ClientsConfig<Clients> = {
  implementation: Clients,
  options: {
    default: {
      retries: 2,
      timeout: 2000,
    },
  },
}

Use clients from handlers through ctx.clients:

export async function getOrder(ctx: Context) {
  const order = await ctx.clients.partnerApi.getOrder(ctx.vtex.route.params.id)
  ctx.body = order
}

If a client file grows too large, split it by bounded integration domains and keep node/clients/index.ts as a small registry.

Common failure modes

  • Using axios, fetch, or other raw HTTP libraries in backend handlers instead of VTEX IO clients.
  • Instantiating clients directly inside handlers instead of registering them in IOClients.
  • Choosing ExternalClient when a native VTEX client or a more specific app client already exists.
  • Putting business rules, validation, or orchestration into clients instead of keeping them as transport wrappers.
  • Scattering headers, auth setup, and retry settings across handlers instead of centralizing them in the client or shared client config.
  • Forgetting the outbound-access policy required for an external integration declared in a custom client.

Review checklist

  • Does each integration use the correct VTEX IO client abstraction?
  • Are native clients from @vtex/api or @vtex/clients preferred when available?
  • Are clients registered in IOClients and consumed through ctx.clients?
  • Are raw HTTP libraries absent from the backend integration code?
  • Are retries, timeouts, headers, and metrics configured in the client layer rather than scattered across handlers?
  • Are business rules kept out of the client layer?

Reference

平台分布

Codex

36.36%
按下载量换算439

Claude

28.43%
按下载量换算343

Cursor

20.81%
按下载量换算251

Gemini CLI

10.4%
按下载量换算126

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

调用外部服务

该 Skill 可能调用第三方服务、云服务或外部模型 API,使用前需要确认账号、额度、数据发送范围和服务条款。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。目前只有一个公开来源,建议同时核对源仓库。

继续浏览同类 Skills