electron-ipc-patterns
Clauday 에 IPC 채널을 추가하거나 수정할 때 따라야 하는 3+1 규칙 패턴. 새 IPC 작업 진입 시 항상 트리거.
Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
Menu
Clauday 에 IPC 채널을 추가하거나 수정할 때 따라야 하는 3+1 규칙 패턴. 새 IPC 작업 진입 시 항상 트리거.
Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
Baseado na classificação ocupacional SOC
| name | electron-ipc-patterns |
| description | Clauday 에 IPC 채널을 추가하거나 수정할 때 따라야 하는 3+1 규칙 패턴. 새 IPC 작업 진입 시 항상 트리거. |
Clauday 의 IPC 는 한 곳에서 누락되면 전체가 깨진다. 본 스킬은 그 누락을 막는 체크리스트.
src/shared/types/ipc.ts — IPC_CHANNELS 단일 카탈로그src/preload/index.ts — contextBridge exposesrc/main/index.ts — ipcMain.handle 등록.agent/wiki/domain-electron-ipc.md — 상세 도메인// src/shared/types/<domain>.ts (없으면 신규)
export interface FooListResult {
items: FooItem[]
}
// src/shared/types/ipc.ts
export const IPC_CHANNELS = {
// ... 기존 ...
FOO_LIST: 'foo:list', // ← 추가
} as const
// src/preload/index.ts
import { IPC_CHANNELS } from '../shared/types/ipc'
contextBridge.exposeInMainWorld('api', {
// ... 기존 ...
foo: {
list: (): Promise<FooListResult> => ipcRenderer.invoke(IPC_CHANNELS.FOO_LIST),
},
})
window.api 의 타입은 src/renderer/src/types/window.d.ts (있으면) 에 동기.
// src/main/index.ts
import { fooService } from './foo/FooService'
// ... 부팅 시 ...
ipcMain.handle(IPC_CHANNELS.FOO_LIST, async () => {
return fooService.list() // 얇은 어댑터만, 로직은 service 안
})
// src/main/foo/FooService.test.ts
import { describe, it, expect } from 'vitest'
import { FooService } from './FooService'
describe('FooService.list', () => {
it('빈 상태에서 빈 배열 반환', () => {
expect(new FooService().list()).toEqual({ items: [] })
})
})
// main
mainWindow.webContents.send(IPC_CHANNELS.FOO_EVENT, payload)
// preload
contextBridge.exposeInMainWorld('api', {
foo: {
onEvent: (cb: (payload: FooEvent) => void): (() => void) => {
const listener = (_: unknown, p: FooEvent): void => cb(p)
ipcRenderer.on(IPC_CHANNELS.FOO_EVENT, listener)
return () => ipcRenderer.removeListener(IPC_CHANNELS.FOO_EVENT, listener)
},
},
})
반드시 unsubscribe 함수 반환. 컴포넌트 unmount 시 누수 방지.
undefined 직렬화 안 됨: 옵셔널 필드는 null 명시 또는 필드 자체 생략.string 으로.await 가 reject. swallow 금지 — 사용자에게 정확한 에러 메시지 전달.@deprecated 주석으로 유예 없이 바로 삭제 가능 — 개인 레포 모드 (외부 API 호환성 불필요).
새 IPC 가 사용자에게 보이는 기능 의 일부면 → ClaudeManual.tsx SECTIONS 갱신 의무.
Use when: developer 페이즈 진입 시, BE/FE 코드 변경을 실행해야 할 때.
Use when: QA 페이즈에서 수락기준 검증이 필요할 때.
Use when: 코드 리뷰가 필요할 때.
Use when: developer 페이즈에서 코드 변경이 필요할 때.
AIService.runClaudeStream 또는 ClaudeChatService 의 claude CLI spawn 코드를 수정할 때 Windows/Mac 분기 함정을 피하기 위한 안전 체크리스트. ai-service 또는 claude-chat 도메인 작업 시 반드시 트리거.
feature/<도메인>/<task-id>/ 산출물 (prd, adr, plan, impl-log, qa-report) 의 YAML frontmatter / 필수 섹션 / 불변성 검증. integrator 가 게이트 진입 시 호출.