From devoks-core
DevOks 에이전트 행동 원칙 컨텍스트 주입 — Agent Principles, Project Convention, Memory Policy를 로드한다.
How this skill is triggered — by the user, by Claude, or both
Slash command
/devoks-core:devoks-core-rulesThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Behavioral principles the AI agent must follow during development work.
Behavioral principles the AI agent must follow during development work.
pnpm dev). Assume it is always already running. For mobile UI verification, use feasible lint/type/test/static checks; if simulator or device validation is required, ask the user to verify it.git commit or git push without an explicit request.--no-verify, --force, or --hard.이 문서에서는 코딩 스타일, 네이밍 규칙, 파일 구조 등 프로젝트의 일관된 conventions를 정리합니다.
Language: JavaScript + JSDoc (TypeScript 미사용)
| 대상 | 규칙 | 예시 |
|---|---|---|
| 컴포넌트 파일 | PascalCase.jsx | AppHeader.jsx, SafeModal.jsx |
| 유틸/훅 파일 | camelCase.js | debug.util.js, useBootSplash.js |
| 상수 파일 | PascalCase.js | SchemaNames.js, BeanStatus.js |
| 컴포넌트 | PascalCase | export default AppHeader |
| 커스텀 훅 | use + PascalCase | useBootSplash, useInViewport |
| Context 훅 | useXxxOrThrow | useToolbarOrThrow() |
| Private 헬퍼 | # + prefix | #requireBooleanOrThrow |
| 상수 | UPPER_SNAKE_CASE | ZINDEX.HEADER, BEAN_STATUS.CREATE |
| 변수/함수 | camelCase | showTimeText, loadConfig |
// 1. React / 외부 라이브러리
import { useEffect, useMemo, useState } from "react";
import { Button, Typography } from "antd";
import { useTranslation } from "react-i18next";
// 2. 유틸 / 상수
import { createDebugger } from "../../common/debug.util";
import { ZINDEX } from "../../constants/ZIndexHelper";
// 3. 컨텍스트 / 모델
import { useAuth } from "../../context/network/AuthProvider";
import MenuItem from "../../model/MenuItem";
// 4. 컴포넌트 / 스타일
import MenuBrew from "./components/MenuBrew";
import styles from "./brewing.style";
Object.freeze() 적용export const BEAN_AMOUNT_RULE = Object.freeze({
key: "beanAmount",
min: 0.0,
max: 20.0,
precision: 1,
defaultValue: 18.0,
});
useXxx prefix, 커스텀 훅은 hooks/ 디렉토리export const ToolbarContext = createContext(null);
export function useToolbarOrThrow() {
const ctx = useContext(ToolbarContext);
if (!ctx) throw new Error("useToolbar must be used within a ToolbarProvider");
return ctx;
}
export const ToolbarProvider = ({ children }) => {
const value = useMemo(() => ({ ... }), [deps]);
return <ToolbarContext.Provider value={value}>{children}</ToolbarContext.Provider>;
};
createContext(null) + useXxxOrThrow() 패턴useMemo로 context value 감싸기| 상황 | 처리 |
|---|---|
| Contract boundary | *OrThrow → throw Error with context message |
| HTTP | fetchWithAuth 에러 → 호출자에서 catch/handle |
| I/O (DB, 파일) | try-catch + console.error + rethrow |
| Provider 초기화 | catch + console.error + rethrow |
금지: silent catch, implicit fallback, typeof 가드로 조용히 넘기기
*.test.js)describe(단위) → it(동작) → expect(결과)영속 사실이 여러 곳에 흩어지면 drift(불일치)가 생기므로, 계층별 역할을 아래로 고정한다. 결정·선호·영속 사실의 단일 진실원천(SSOT)은 Claude 파일 메모리 하나다.
| 계층 | 위치 | 역할 | 운영 규칙 |
|---|---|---|---|
| Claude 파일 메모리 | ~/.claude/projects/.../memory/ | 영속 사실·결정·피드백·레퍼런스의 SSOT | 세션을 넘겨 유지할 결정/선호/사실은 여기에만 기록 |
| context-mode 세션 메모리 | ctx_search(sort: "timeline") | 자동 세션 회상 전용 | 자동 캡처만 신뢰. 수동 큐레이션 금지 |
| Serena memory | .serena/memories/ | 사용 안 함 | 결정·사실 저장 금지. Serena는 심볼 탐색·편집 도구로만 사용 |
MEMORY.md에 인덱스 한 줄.Provides behavioral guidelines to reduce common LLM coding mistakes, focusing on simplicity, surgical changes, assumption surfacing, and verifiable success criteria.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
npx claudepluginhub ridsync/devoks-team-harness --plugin devoks-core