[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6PDJ2FR54SPZ0BZF4WRZDVV":3,"skill-same:01M6PDJ2FR54SPZ0BZF4WRZDVV":76},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":53,"commitSha":54,"skillDirectory":55,"forksCount":56,"repositoryHtmlUrl":57,"repositoryHomepageUrl":57,"ownerHtmlUrl":58,"ownerBlogUrl":59,"ownerDescription":60,"updatedAt":61,"install":62,"resources":75},"01M6PDJ2FR54SPZ0BZF4WRZDVV","langfuse-laravel-ai",null,"Use when adding Langfuse tracing\u002Fobservability to a Laravel app that uses the laravel\u002Fai SDK (Laravel\\Ai\\ namespace, Agent classes, ->prompt()\u002F->stream(), tools, conversations). Activate when the user wants to trace LLM\u002Fagent calls, token usage, or tool invocations to Langfuse in a Laravel project, pairs Langfuse with laravel\u002Fai, or asks why traces aren't showing up. Laravel\u002FPHP-specific: laravel\u002Fai has no OpenTelemetry support and there is no first-party PHP Langfuse SDK, so the integration path is non-obvious.","douinc\u002Fagent-skills","douinc","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F104253814?v=4","01M6PDGX2D777TNA7NETDKDHCW","dou inc.","01M6PDGX6QMFW72GNMX59GKN6P",1,"MIT","https:\u002F\u002Fgithub.com\u002Fdouinc\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Flangfuse-laravel-ai\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"langfuse laravel ai","langfuse","laravel","use","conversations","usage","calls","with","app","project","activate","up","sdk","prompt","tool","why","first","OpenTelemetry","observability","support","2026-11-10 10:12:30",false,"---\nname: langfuse-laravel-ai\ndescription: \"Use when adding Langfuse tracing\u002Fobservability to a Laravel app that uses the laravel\u002Fai SDK (Laravel\\\\Ai\\\\ namespace, Agent classes, ->prompt()\u002F->stream(), tools, conversations). Activate when the user wants to trace LLM\u002Fagent calls, token usage, or tool invocations to Langfuse in a Laravel project, pairs Langfuse with laravel\u002Fai, or asks why traces aren't showing up. Laravel\u002FPHP-specific: laravel\u002Fai has no OpenTelemetry support and there is no first-party PHP Langfuse SDK, so the integration path is non-obvious.\"\nmetadata:\n  author: initred\n  email: initred@dou.so\n  version: \"1.0.0\"\n---\n\n# Langfuse × laravel\u002Fai\n\n`laravel\u002Fai` SDK(`Laravel\\Ai\\`)를 쓰는 Laravel 앱의 LLM\u002F에이전트 호출을 Langfuse로 트레이싱한다.\n\n## 핵심 전제 (먼저 알아야 할 것)\n\n- laravel\u002Fai는 **OpenTelemetry를 지원하지 않고**, 공식 PHP Langfuse SDK도 없다. 직접 OTLP\u002F인제스션 클라이언트를 짜기 전에 **`axyr\u002Flaravel-langfuse`를 먼저 채택한다** — laravel\u002Fai를 **zero-code 자동계측**하고 Langfuse 인제스션 API로 큐 배칭 전송한다.\n- 패키지 비교(채택 전 근거):\n\n| 패키지 | laravel\u002Fai 자동계측 | 전송 | 주의 |\n| --- | --- | --- | --- |\n| `axyr\u002Flaravel-langfuse` ✅ | O | Langfuse 네이티브 인제스션 | require가 `illuminate`만 → laravel\u002Fai 버전 **비강제**(충돌 없음) |\n| `tracefast\u002Flaravel-ai-observability` | O | OTLP 경유 | `laravel\u002Fai ^0.7`을 **강제** → 낮은 버전과 충돌 위험 |\n| `dropsolid\u002F` · `dij-digital\u002F` · `janzaba\u002F` | X (수동 trace API만) | Langfuse | 결국 이벤트 후킹은 직접 해야 함 |\n\n## 설치 & 설정\n\n1. `composer require axyr\u002Flaravel-langfuse`\n   - post-install 훅이 `package.json`을 무관하게 건드리면 `git checkout package.json`으로 원복.\n2. `php artisan vendor:publish --tag=langfuse-config`\n3. `.env` (env 키가 표준이라 기존 `LANGFUSE_*` 값을 그대로 재사용):\n   ```env\n   LANGFUSE_PUBLIC_KEY=pk-lf-...\n   LANGFUSE_SECRET_KEY=sk-lf-...\n   LANGFUSE_BASE_URL=https:\u002F\u002Fcloud.langfuse.com   # self-hosted면 그 URL\n   LANGFUSE_LARAVEL_AI_ENABLED=true               # ← 자동계측 ON (필수)\n   LANGFUSE_QUEUE=default                          # 큐 worker로 비동기 전송\n   ```\n4. 등록 확인: `php artisan config:clear && php artisan event:list | grep LaravelAiSubscriber`\n   → laravel\u002Fai 6개 이벤트에 붙어야 정상.\n\n## 자동계측이 잡는 것\n\n`Axyr\\Langfuse\\LaravelAi\\LaravelAiSubscriber`가 후킹한다:\n\n| laravel\u002Fai 이벤트 | Langfuse 관측치 |\n| --- | --- |\n| `PromptingAgent` \u002F `StreamingAgent` | trace 생성 + 시작 시각 |\n| `AgentPrompted` \u002F `AgentStreamed` | generation (model, input, output, token usage) |\n| `InvokingTool` \u002F `ToolInvoked` | tool span (arguments, result) |\n\nbaseline(model·토큰·input\u002Foutput·observation 타입·span 계층)은 **코드 변경 없이** 채워진다.\n\n## 핵심 패턴 — trace 컨텍스트 보강\n\n자동계측만으로는 **session_id·user_id·도메인 메타데이터가 없다**. subscriber의 `resolveTrace()`는 **이미 설정된 `currentTrace()`가 있으면 그걸 재사용**한다. 따라서 에이전트 호출 직전에 trace를 미리 열어두면 generation·tool span이 그 아래로 nest된다.\n\n```php\nuse Axyr\\Langfuse\\Dto\\TraceBody;\nuse Axyr\\Langfuse\\LangfuseFacade as Langfuse;\n\n\u002F\u002F 에이전트를 prompt()\u002Fstream() 하기 전에:\nLangfuse::setCurrentTrace(Langfuse::trace(new TraceBody(\n    name: 'questionnaire-builder',\n    userId: (string) $user->id,\n    sessionId: $conversationId,           \u002F\u002F 멀티턴 대화 그룹핑\n    metadata: ['questionnaire_id' => $q->id, 'team_id' => $team->id],\n    tags: ['questionnaire-builder'],\n)));\n\n$response = (new MyAgent(...))\n    ->continue($conversationId, as: $user)\n    ->stream($prompt);\n```\n\n같은 요청 내 LLM 호출이 여러 개여도 한 trace로 묶인다. 큐 잡 등 비-HTTP 컨텍스트에서도 동일하게 호출 전에 `setCurrentTrace`를 호출하면 된다.\n\n**순서가 중요하다.** `setCurrentTrace`를 **에이전트 호출보다 먼저** 해야 한다. 빠뜨리면 `resolveTrace()`가 `laravel-ai-\u003CAgentClass>` 이름의 기본 trace를 자동 생성하는데, 여기엔 session_id·user_id·도메인 메타데이터가 없다(=보강 실패). 요청당 한 번, 여러 에이전트를 쓰면 첫 호출 전에 한 번 열어두면 그 아래로 전부 nest된다.\n\n## 테스트 (Pest)\n\n```php\n$langfuse = Langfuse::fake();                     \u002F\u002F RecordingEventBatcher\nMyAgent::fake(['응답'])->preventStrayPrompts();    \u002F\u002F 실제 provider 호출 차단\n\n\u002F\u002F ... 엔드포인트\u002F액션 실행 ...\n\n$langfuse->assertTraceCreated('questionnaire-builder');\n$body = collect($langfuse->events())\n    ->first(fn ($e) => $e->type->value === 'trace-create')\n    ->body->toArray();\nexpect($body['sessionId'])->toBe($conversationId)\n    ->and($body['userId'])->toBe((string) $user->id);\n```\n\n**중요:** laravel\u002Fai의 `FakeTextGateway`는 이벤트를 dispatch하지 않는다 → 테스트에서 **자동계측 generation\u002Ftool span은 검증 불가**. 검증 가능한 것은 `setCurrentTrace`로 직접 연 trace다(`LangfuseTrace` 생성자가 즉시 enqueue하므로 `assertTraceCreated`가 통과). 자동계측 동작 자체는 패키지 책임이므로 우리 보강 코드만 테스트한다.\n\n## 함정 (자주 막히는 지점)\n\n- **실제 trace가 대시보드에 뜨려면** 실제 provider 호출 + 큐 worker가 떠 있어야 한다(`LANGFUSE_QUEUE` 사용 시 `queue:work`\u002F`queue:listen`). 로컬은 `composer run dev`가 worker를 포함하는 경우가 많다. trace가 안 보이면 먼저 worker부터 확인.\n- `LANGFUSE_QUEUE`를 비워두면(null) 동기 전송 — 큐 worker 없이도 가게 되지만 요청 종료 시 HTTP 호출이 붙어 약간 지연된다. worker 인프라가 없는 환경이면 이 모드가 더 안전하다(설정한 큐를 worker가 처리하지 않으면 trace가 영영 전송되지 않으니 주의).\n- 인증\u002F연결 핑(읽기 전용):\n  ```bash\n  AUTH=$(printf '%s:%s' \"$LANGFUSE_PUBLIC_KEY\" \"$LANGFUSE_SECRET_KEY\" | base64)\n  curl -s -o \u002Fdev\u002Fnull -w '%{http_code}\\n' -H \"Authorization: Basic $AUTH\" \\\n    \"$LANGFUSE_BASE_URL\u002Fapi\u002Fpublic\u002Ftraces?limit=1\"   # 200 이면 OK\n  ```\n- usage 매핑은 prompt\u002Fcompletion 토큰만 — cache\u002Freasoning 토큰은 누락되어 비용이 약간 부정확할 수 있다.\n- `LANGFUSE_ENABLED=false`면 no-op(NullTrace)로 graceful 비활성 — 코드 변경 없이 끌 수 있다(로컬\u002FCI).\n- PII가 프롬프트·메타데이터에 들어가는 도메인이면 trace `input`\u002F`metadata`에서 마스킹·제외한다.\n- Langfuse v3(self-hosted)는 비동기 인제스션이라 trace가 몇 초 지연될 수 있다.\n","# Langfuse × laravel\u002Fai\n\n`laravel\u002Fai` SDK(`Laravel\\Ai\\`)를 쓰는 Laravel 앱의 LLM\u002F에이전트 호출을 Langfuse로 트레이싱한다.\n\n## 핵심 전제 (먼저 알아야 할 것)\n\n- laravel\u002Fai는 **OpenTelemetry를 지원하지 않고**, 공식 PHP Langfuse SDK도 없다. 직접 OTLP\u002F인제스션 클라이언트를 짜기 전에 **`axyr\u002Flaravel-langfuse`를 먼저 채택한다** — laravel\u002Fai를 **zero-code 자동계측**하고 Langfuse 인제스션 API로 큐 배칭 전송한다.\n- 패키지 비교(채택 전 근거):\n\n| 패키지 | laravel\u002Fai 자동계측 | 전송 | 주의 |\n| --- | --- | --- | --- |\n| `axyr\u002Flaravel-langfuse` ✅ | O | Langfuse 네이티브 인제스션 | require가 `illuminate`만 → laravel\u002Fai 버전 **비강제**(충돌 없음) |\n| `tracefast\u002Flaravel-ai-observability` | O | OTLP 경유 | `laravel\u002Fai ^0.7`을 **강제** → 낮은 버전과 충돌 위험 |\n| `dropsolid\u002F` · `dij-digital\u002F` · `janzaba\u002F` | X (수동 trace API만) | Langfuse | 결국 이벤트 후킹은 직접 해야 함 |\n\n## 설치 & 설정\n\n1. `composer require axyr\u002Flaravel-langfuse`\n   - post-install 훅이 `package.json`을 무관하게 건드리면 `git checkout package.json`으로 원복.\n2. `php artisan vendor:publish --tag=langfuse-config`\n3. `.env` (env 키가 표준이라 기존 `LANGFUSE_*` 값을 그대로 재사용):\n   ```env\n   LANGFUSE_PUBLIC_KEY=pk-lf-...\n   LANGFUSE_SECRET_KEY=sk-lf-...\n   LANGFUSE_BASE_URL=https:\u002F\u002Fcloud.langfuse.com   # self-hosted면 그 URL\n   LANGFUSE_LARAVEL_AI_ENABLED=true               # ← 자동계측 ON (필수)\n   LANGFUSE_QUEUE=default                          # 큐 worker로 비동기 전송\n   ```\n4. 등록 확인: `php artisan config:clear && php artisan event:list | grep LaravelAiSubscriber`\n   → laravel\u002Fai 6개 이벤트에 붙어야 정상.\n\n## 자동계측이 잡는 것\n\n`Axyr\\Langfuse\\LaravelAi\\LaravelAiSubscriber`가 후킹한다:\n\n| laravel\u002Fai 이벤트 | Langfuse 관측치 |\n| --- | --- |\n| `PromptingAgent` \u002F `StreamingAgent` | trace 생성 + 시작 시각 |\n| `AgentPrompted` \u002F `AgentStreamed` | generation (model, input, output, token usage) |\n| `InvokingTool` \u002F `ToolInvoked` | tool span (arguments, result) |\n\nbaseline(model·토큰·input\u002Foutput·observation 타입·span 계층)은 **코드 변경 없이** 채워진다.\n\n## 핵심 패턴 — trace 컨텍스트 보강\n\n자동계측만으로는 **session_id·user_id·도메인 메타데이터가 없다**. subscriber의 `resolveTrace()`는 **이미 설정된 `currentTrace()`가 있으면 그걸 재사용**한다. 따라서 에이전트 호출 직전에 trace를 미리 열어두면 generation·tool span이 그 아래로 nest된다.\n\n```php\nuse Axyr\\Langfuse\\Dto\\TraceBody;\nuse Axyr\\Langfuse\\LangfuseFacade as Langfuse;\n\n\u002F\u002F 에이전트를 prompt()\u002Fstream() 하기 전에:\nLangfuse::setCurrentTrace(Langfuse::trace(new TraceBody(\n    name: 'questionnaire-builder',\n    userId: (string) $user->id,\n    sessionId: $conversationId,           \u002F\u002F 멀티턴 대화 그룹핑\n    metadata: ['questionnaire_id' => $q->id, 'team_id' => $team->id],\n    tags: ['questionnaire-builder'],\n)));\n\n$response = (new MyAgent(...))\n    ->continue($conversationId, as: $user)\n    ->stream($prompt);\n```\n\n같은 요청 내 LLM 호출이 여러 개여도 한 trace로 묶인다. 큐 잡 등 비-HTTP 컨텍스트에서도 동일하게 호출 전에 `setCurrentTrace`를 호출하면 된다.\n\n**순서가 중요하다.** `setCurrentTrace`를 **에이전트 호출보다 먼저** 해야 한다. 빠뜨리면 `resolveTrace()`가 `laravel-ai-\u003CAgentClass>` 이름의 기본 trace를 자동 생성하는데, 여기엔 session_id·user_id·도메인 메타데이터가 없다(=보강 실패). 요청당 한 번, 여러 에이전트를 쓰면 첫 호출 전에 한 번 열어두면 그 아래로 전부 nest된다.\n\n## 테스트 (Pest)\n\n```php\n$langfuse = Langfuse::fake();                     \u002F\u002F RecordingEventBatcher\nMyAgent::fake(['응답'])->preventStrayPrompts();    \u002F\u002F 실제 provider 호출 차단\n\n\u002F\u002F ... 엔드포인트\u002F액션 실행 ...\n\n$langfuse->assertTraceCreated('questionnaire-builder');\n$body = collect($langfuse->events())\n    ->first(fn ($e) => $e->type->value === 'trace-create')\n    ->body->toArray();\nexpect($body['sessionId'])->toBe($conversationId)\n    ->and($body['userId'])->toBe((string) $user->id);\n```\n\n**중요:** laravel\u002Fai의 `FakeTextGateway`는 이벤트를 dispatch하지 않는다 → 테스트에서 **자동계측 generation\u002Ftool span은 검증 불가**. 검증 가능한 것은 `setCurrentTrace`로 직접 연 trace다(`LangfuseTrace` 생성자가 즉시 enqueue하므로 `assertTraceCreated`가 통과). 자동계측 동작 자체는 패키지 책임이므로 우리 보강 코드만 테스트한다.\n\n## 함정 (자주 막히는 지점)\n\n- **실제 trace가 대시보드에 뜨려면** 실제 provider 호출 + 큐 worker가 떠 있어야 한다(`LANGFUSE_QUEUE` 사용 시 `queue:work`\u002F`queue:listen`). 로컬은 `composer run dev`가 worker를 포함하는 경우가 많다. trace가 안 보이면 먼저 worker부터 확인.\n- `LANGFUSE_QUEUE`를 비워두면(null) 동기 전송 — 큐 worker 없이도 가게 되지만 요청 종료 시 HTTP 호출이 붙어 약간 지연된다. worker 인프라가 없는 환경이면 이 모드가 더 안전하다(설정한 큐를 worker가 처리하지 않으면 trace가 영영 전송되지 않으니 주의).\n- 인증\u002F연결 핑(읽기 전용):\n  ```bash\n  AUTH=$(printf '%s:%s' \"$LANGFUSE_PUBLIC_KEY\" \"$LANGFUSE_SECRET_KEY\" | base64)\n  curl -s -o \u002Fdev\u002Fnull -w '%{http_code}\\n' -H \"Authorization: Basic $AUTH\" \\\n    \"$LANGFUSE_BASE_URL\u002Fapi\u002Fpublic\u002Ftraces?limit=1\"   # 200 이면 OK\n  ```\n- usage 매핑은 prompt\u002Fcompletion 토큰만 — cache\u002Freasoning 토큰은 누락되어 비용이 약간 부정확할 수 있다.\n- `LANGFUSE_ENABLED=false`면 no-op(NullTrace)로 graceful 비활성 — 코드 변경 없이 끌 수 있다(로컬\u002FCI).\n- PII가 프롬프트·메타데이터에 들어가는 도메인이면 trace `input`\u002F`metadata`에서 마스킹·제외한다.\n- Langfuse v3(self-hosted)는 비동기 인제스션이라 trace가 몇 초 지연될 수 있다.\n",{"name":5,"metadata":49,"description":7},{"email":50,"author":51,"version":52},"initred@dou.so","initred","1.0.0","main","ee55538fc8b60bb1595f860f18cbd7baba1925aa","skills\u002Flangfuse-laravel-ai",0,"https:\u002F\u002Fgithub.com\u002Fdouinc\u002Fagent-skills","https:\u002F\u002Fgithub.com\u002Fdouinc","https:\u002F\u002Fdou.so","A clinical intelligence company","2026-11-11 17:58:59",{"source":8,"skillName":5,"commands":63,"prompt":73,"zipAvailable":74},[64,67,70],{"tool":65,"command":66},"npx","npx skills add douinc\u002Fagent-skills --skill langfuse-laravel-ai",{"tool":68,"command":69},"bunx","bunx skills add douinc\u002Fagent-skills --skill langfuse-laravel-ai",{"tool":71,"command":72},"pnpm","pnpm dlx skills add douinc\u002Fagent-skills --skill langfuse-laravel-ai","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fdouinc\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Flangfuse-laravel-ai\u002FSKILL.md",true,[],[77,89,127,142,171,187],{"skillNo":78,"name":79,"nameZh":6,"description":80,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":81,"categories":82,"keywords":84,"publishedAt":44},"01M6PDKC7XDA3NYF969T945D7S","template-skill","Replace with description of the skill and when the agent should use it.","https:\u002F\u002Fgithub.com\u002Fdouinc\u002Fagent-skills\u002Fblob\u002Fmain\u002Ftemplate\u002FSKILL.md",[83],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[85,86,31,27,87,88],"template skill","template","name","it",{"skillNo":90,"name":91,"nameZh":6,"description":92,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":93,"categories":94,"keywords":107,"publishedAt":44},"01M6PDK6MNC6EMGA8W7KD7NJQX","writing-project-readme","Use when explicitly invoked to write or fully rewrite a project README that must cover tech stack, architecture, features, and service description in a single document — readable by non-engineers (PM, design, ops, domain experts) as well as developers. Triggers on requests like \"write the README\", \"redo README.md based on the whole project\", \"make a comprehensive README everyone can understand\". Skip for one-section edits, badge tweaks, or generating a CHANGELOG.","https:\u002F\u002Fgithub.com\u002Fdouinc\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fwriting-project-readme\u002FSKILL.md",[95,98,99,104],{"categoryNo":96,"categoryName":97,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":100,"categoryName":101,"taxonomyType":102,"taxonomyTypeDesc":103},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",{"categoryNo":105,"categoryName":106,"taxonomyType":102,"taxonomyTypeDesc":103},"01JBSEEDCAT000000000000036","内容创作者",[108,109,33,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126],"writing","README","project readme","writing project readme","changelog","architecture","domain","design","alpha","stack","write","pm","as","tech","make","experts","cover","for","features",{"skillNo":128,"name":129,"nameZh":6,"description":130,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":131,"categories":132,"keywords":136,"publishedAt":44},"01M6PDK2S8KXK1NDM22C9FKE49","ux-writing-korean","한국어로 UI\u002FUX 문구를 작성하거나 검수할 때 사용합니다. 해요체, 능동형, 긍정형, 캐주얼 경어, 명사 조합 회피 등 5가지 핵심 원칙과 예외 규칙을 적용합니다.","https:\u002F\u002Fgithub.com\u002Fdouinc\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fux-writing-korean\u002FSKILL.md",[133,134,135],{"categoryNo":96,"categoryName":97,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":100,"categoryName":101,"taxonomyType":102,"taxonomyTypeDesc":103},{"categoryNo":105,"categoryName":106,"taxonomyType":102,"taxonomyTypeDesc":103},[137,138,139,140,108,141],"ux writing korean","ux writing","korean","ux","ui",{"skillNo":143,"name":144,"nameZh":6,"description":145,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":146,"categories":147,"keywords":152,"publishedAt":44},"01M6PDJXK3DVWFR0420XV79HZ6","token-audit","Audit a Claude Code or Codex CLI project for token waste and fix it with the user's approval. Use whenever the user wants to check, reduce, or optimize token usage, context bloat, or API\u002Fsubscription costs of an agent project — phrases like \"토큰 점검\", \"토큰 낭비 찾아줘\", \"토큰 최적화\", \"컨텍스트 최적화\", \"Claude Code 비용 줄여줘\", \"API 비용이 너무 나와\", \"audit token efficiency\", \"check my CLAUDE.md\u002FAGENTS.md\u002FMCP setup\". Also trigger when the user complains that sessions hit context limits too fast, that costs jumped unexpectedly, or asks whether their project setup is token-efficient — even if they don't say the word \"token\".","https:\u002F\u002Fgithub.com\u002Fdouinc\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Ftoken-audit\u002FSKILL.md",[148,149],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":150,"categoryName":151,"taxonomyType":102,"taxonomyTypeDesc":103},"01JBSEEDCAT000000000000030","开发工程师",[153,154,155,156,157,158,159,160,29,161,33,162,163,164,165,166,167,168,169,170],"token","audit","token audit","limits","token efficiency","bloat","api","my","mcp setup","efficiency","optimize","fix","context","reduce","code","codex cli","cli","MCP",{"skillNo":172,"name":173,"nameZh":6,"description":174,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":175,"categories":176,"keywords":177,"publishedAt":44},"01M6PDJR1Y9BAM48RDKRQHK5MQ","release-showcase","정식 릴리스의 변경을 이전·이후 스크린샷, 클릭 흐름 녹화 영상, 비교·단계·탭·흐름도 같은 HTML 컴포넌트로 보여 주는 파일 하나짜리 릴리스 문서를 만든다. 텍스트뿐인 릴리스 노트로는 어떤 UX가 바뀌었고 새 기능을 어떻게 쓰는지 감이 안 올 때 쓴다. '릴리스 노트 문서 만들어 줘', '릴리스 쇼케이스', '이번 배포 변경사항 정리해서 공유', '릴리즈 노트 HTML', '변경사항을 화면으로 보여 주는 문서', '업데이트 소개 페이지', 'what's new 페이지', 'release notes with screenshots', 'changelog page', '배포 공지 자료'처럼 버전 태그 사이의 변경을 팀·고객에게 시각적으로 알릴 때 반드시 사용한다. git 태그로 릴리스하는 저장소라면 웹·데스크톱·모바일 어느 앱이든 쓴다. 커밋 목록만 필요한 CHANGELOG.md 갱신, 릴리스 태그·배포 자체, 마케팅 영상 제작에는 쓰지 않는다.","https:\u002F\u002Fgithub.com\u002Fdouinc\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Frelease-showcase\u002FSKILL.md",[],[178,179,180,181,182,183,184,112,31,185,186],"release","showcase","release showcase","git","release notes","notes","screenshots","html","page",{"skillNo":188,"name":189,"nameZh":6,"description":190,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":191,"categories":192,"keywords":195,"publishedAt":44},"01M6PDJJEQMBWWXW4TPXYNNV38","public-sector-rfp-authoring","Use when drafting or revising Korean government or local-government bid notices, requests for proposals, statements of work, or public-sector service\u002Fproject specifications from the ordering agency's perspective.","https:\u002F\u002Fgithub.com\u002Fdouinc\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fpublic-sector-rfp-authoring\u002FSKILL.md",[193,194],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":100,"categoryName":101,"taxonomyType":102,"taxonomyTypeDesc":103},[196,197,198,199,200,201,202,125,203,204,205,33,206,139,27,207,208,209],"public sector rfp authoring","authoring","rfp","public","hermes","agency","perspective","requests","specifications","service","local","proposals","work","hermes agent"]