하나의 현금흐름 분석 Skill을 verifier 기준으로 나눠 본 2주차 실습(에이전트하네스 2주차)

한 줄 요약

누적분개장의 직접·간접 현금화를 추적하던 실제 journal-indirect-cash-tracing Skill을 대상으로, 일반 경로 추적과 업무별 소멸 예외 판정의 verifier가 다르다는 점을 찾아 두 책임으로 분리하고 하나의 Umbrella 아래 연결했다.

이런 분께 추천

  • 하나의 Skill에 파싱·판정·예외처리·출력 책임이 계속 쌓이는 분

  • “파일이 크다”가 아니라 실제 실패 원인과 검증 방법을 기준으로 나누고 싶은 분

  • 원본 Skill을 건드리지 않고 백업·복원·fixture·Gate로 안전하게 실험하고 싶은 분

  • 사용량 숫자를 실제 업무 실행 이력으로 오해하지 않고 증거의 한계를 확인하고 싶은 분

Before

기존 Skill은 하나의 실행 스크립트에서 다음 흐름을 처리했다.

분개장 디코딩·파싱
→ 전표 내부 차대 매칭
→ 전표 간 반대분개 연결
→ 현금성계정까지 경로 탐색
→ 시간주차비·내국신용장 특수 소멸 판정
→ BS↔BS AC:AF 배분
→ Excel 생성·대사

처음에는 “큰 Skill이므로 나눈다”는 접근도 가능했지만, 크기만으로는 어디를 잘라야 하는지 설명하기 어려웠다. 그래서 실제 소스에서 실패 소유자·verifier·수리 방법이 다른 지점을 찾았다.

사용한 도구

  • Hermes Agent v0.19.0

  • W2-learning-guide v1.0.9

  • backup_before_skill_mutation.py

  • Python 표준 라이브러리 unittest

  • Hermes skill_view, read_file, write_file, patch, terminal

핵심 개념

1. 큰 Skill은 출발점이다

처음부터 폴더 수를 늘리는 것이 목적이 아니라, 반복 실행 중 다른 방식으로 실패하고 다른 방식으로 검증해야 하는 책임을 찾는 것이 먼저였다.

2. 이번 절단선은 verifier 차이였다

일반 현금화 경로 추적은 다음을 검증한다.

  • 경로가 현금성계정에서 끝나는가

  • 날짜가 역행하지 않는가

  • 계정 순환이 없는가

  • 추적금액이 원금액을 초과하지 않는가

업무별 소멸 예외 판정은 다음을 검증한다.

  • 동일 사업장·계정·금액인가

  • 차변과 대변이 반대로 연결되는가

  • 시간주차비의 익월 조건을 만족하는가

  • 내국신용장의 허용기간과 적요 조건을 만족하는가

두 책임은 입력 데이터가 비슷해도 성공을 증명하는 계약이 달랐다.

만든 것

candidate-skills/
├─ journal-noncash-analysis/
│  ├─ SKILL.md
│  └─ scripts/run_analysis.py
├─ journal-cash-path-tracer/
│  ├─ SKILL.md
│  └─ scripts/trace_general.py
├─ journal-extinction-exception-rules/
│  ├─ SKILL.md
│  └─ scripts/apply_exception_rules.py
└─ tests/
   ├─ fixtures/
   │  ├─ direct_and_indirect.json
   │  ├─ parking_extinction.json
   │  ├─ lc_reversal.json
   │  └─ ambiguous_and_invalid.json
   ├─ test_candidate_circuit.py
   └─ verify_gates.py

Tree

journal-noncash-analysis
├─ journal-cash-path-tracer
└─ journal-extinction-exception-rules

Circuit

전체 분개장 행
→ 일반 현금화 추적
→ unmatched_target_rows
→ 업무별 소멸 예외 판정
→ 순수 비현금 또는 human_review
→ 금액 보존·중복 소유 검증

실행 로그

잘된 점

각 기능을 구현하기 전에 테스트가 예상한 이유로 실패하는 것을 확인했다.

  1. 일반 추적: trace_general.py 부재로 RED → 구현 후 GREEN

  2. 시간주차비: 예외 모듈 부재로 RED → 구현 후 GREEN

  3. 내국신용장: lc_max_days 계약 부재로 RED → 구현 후 GREEN

  4. Umbrella: run_analysis.py 부재로 RED → 구현 후 GREEN

최종 실행:

test_general_trace_classifies_direct_indirect_and_unmatched ... ok
test_lc_rule_requires_reverse_within_configured_days ... ok
test_parking_rule_extinguishes_only_exact_next_month_reversal ... ok
test_umbrella_circuit_preserves_amounts_and_routes_ambiguity ... ok

Ran 4 tests in 0.019s
OK

실제 Circuit smoke 결과:

cash: [A1]
exception: [B1]
pure_noncash: [C1]
human_review: [E1]
amounts:
  input: 1000.0
  cash_classified: 100.0
  exception_extinguished: 200.0
  pure_noncash: 300.0
  human_review: 400.0
amount_conservation_pass: true
duplicates: []

막힌 점과 수정

  • 첫 테스트에서 pytest가 설치되어 있지 않아 기능 RED가 아니라 러너 오류가 발생했다.

  • 외부 패키지를 설치하지 않고 Python 표준 unittest로 바꿨다.

Before / After

항목

Before

After 후보

책임 구조

한 Skill·한 스크립트에 일반 추적과 예외 규칙 공존

일반 추적과 업무별 예외 판정을 분리

일반 추적 성공 기준

전체 흐름 안에 섞여 있음

현금성계정 종점·날짜·금액·순환 verifier

예외 성공 기준

키워드별 조건문

규칙 ID·기간·사업장·금액·반대차대 verifier

미매칭 처리

후속 로직에 내장

명시적 unmatched_target_rows 계약

복수 후보

자동선택 위험

human_review로 반환

전체 검증

Excel 결과 중심

행 ID 고유성 + 금액 보존 Circuit Gate

원본 보호

직접 수정 위험

보호 원본·immutable 사본·working copy·복원 리허설

안전 증거

protected_source_sha256: 2c4d4b66d2304d5cf6b4b0848556f2920e5bb0dfc0c95d32faf14344e2eb7366
immutable_copy_sha256: 2c4d4b66d2304d5cf6b4b0848556f2920e5bb0dfc0c95d32faf14344e2eb7366
source_immutable_identical: true
restore_rehearsal: PASS

원본 Skill은 수정하지 않았고 후보 Skill도 활성 Hermes 프로필에 설치하지 않았다.

배운 점

Skill을 나누는 기준은 크기가 아니라, 같은 입력을 받아도 실패 원인과 통과를 증명하는 verifier가 달라지는가였다.

이 문장은 Station F에서 사용자가 추천 문장 — 분리 기준은 크기가 아니라 verifier 차이였다를 직접 선택해 확정했다.

다음에 다시 쓸 팁

  1. 큰 Skill을 보면 파일 수가 아니라 실패 소유자와 verifier부터 적는다.

  2. 분리 후보는 input → steps → output → verifier → failure_return 카드로 만든다.

  3. 실제 업무 데이터 대신 비식별 synthetic fixture로 경계를 먼저 증명한다.

  4. 후보 파일을 만들기 전에 positive·negative·boundary Proof를 정한다.

  5. 원본과 immutable 사본의 tree SHA-256을 마지막 Gate에서 다시 확인한다.

확장 아이디어

  • 부분금액 배분과 다대다 전표를 일반 추적 Skill에 추가

  • 생산 규정에 따라 내국신용장 허용기간을 설정 파일로 분리

  • 예외 규칙별 실행 ID·rule ID·verifier 결과를 기록하는 상세 감사 로그 설계

  • 실제 운영 적용 전 비식별 golden workbook을 이용한 AC:AF 대사 Gate 추가

  • 후보를 설치하려면 별도의 production review와 기존 Skill 호환성 검증 수행

재사용 프롬프트

이 실제 Skill을 원본 수정 없이 학습용 사본으로 복제한 뒤 분석해줘.
크기나 이름으로 나누지 말고, 최근 실패 원인·verifier·수리 방법이 다른 책임을 찾아줘.
각 후보를 input → steps → output → verifier → failure_return 카드로 만들고,
분리 전 positive·negative·boundary fixture와 Tree/Skill/Circuit Gate를 설계해줘.
후보 생성 전 백업 및 복원 리허설을 수행하고,
마지막에는 보호 원본과 immutable 사본의 SHA-256이 동일한지 검증해줘.

마무리 한 문장

Skill을 잘게 만드는 것이 목표가 아니라, 서로 다른 실패를 서로 다른 verifier로 증명하고 다시 안전하게 연결하는 것이 이번 분해의 핵심이었다.

3
2개의 답글
밀어주고 끌어주는

온·오프라인 AI 스터디

AI로 어디까지 할 수 있는지
직접 확인하실 분만 신청하세요.