메뉴
HN
Hacker News 26일 전

시니어 엔지니어링을 코딩 에이전트에 구현하다

IMP
8/10
핵심 요약

시니어 엔지니어의 핵심 업무인 기획, 테스트, 코드 리뷰 등의 과정을 AI 코딩 에이전트가 건너뛰는 문제를 해결하기 위해 'Agent Skills' 프로젝트가 개발되었습니다. 이 프로젝트는 단순한 참고 문서가 아닌 명확한 종료 조건이 있는 '워크플로우'를 에이전트에 주입하여 소프트웨어 개발 수명 주기(SDLC) 전체를 따르도록 강제합니다. 결과적으로 AI가 마치 경험 많은 엔지니어처럼 검증 가능하고 안정적인 코드를 작성하게 만드는 실용적인 접근법으로, 개발 실무자들에게 큰 의미를 지닙니다.

번역된 본문

시니어 엔지니어의 업무는 대부분 코드의 변경 사항(diff)에 나타나지 않는 부분들로 이루어집니다. 명세서 작성(Specs), 테스트, 코드 리뷰, 범위 관리, 그리고 검증할 수 없는 코드의 출시를 거부하는 일이죠. AI 코딩 에이전트들은 기본적으로 이러한 과정들을 건너뜁니다. 'Agent Skills'는 이러한 필수 과정들을 선택이 아닌 필수로 만들기 위한 저의 시도입니다.

모든 AI 코딩 에이전트의 기본적인 행동 방식은 '완료' 상태에 도달하기 위한 가장 빠른 지름길을 택하는 것입니다. 기능 추가를 요청하면 그 기능을 작성합니다. 하지만 명세서가 있는지 묻지 않고, 구현에 앞서 테스트를 먼저 작성하지 않으며, 해당 변경이 신뢰 경계(trust boundary)를 넘는지 고려하거나 리뷰어의 눈에 PR이 어떻게 보일지 확인하지 않습니다. 코드를 작성하고, 성공을 선언한 뒤 다음으로 넘어갑니다. 이는 모든 시니어 엔지니어가 자신의 커리어 동안 피하고자 애써 왔던 것과 정확히 같은 실패 양상(failure mode)입니다.

모든 작업에 있어 시니어 엔지니어의 버전에는 diff에 나타나지 않는 작업들이 포함됩니다. 숨겨진 전제 조건들을 끌어내고, 명세서를 작성하며, 작업을 리뷰 가능한 단위로 나누고, 뻔하지만 검증된(boring) 설계를 선택하고, 결과가 올바르다는 증거를 남기며, 사람이 실제로 리뷰할 수 있도록 변경 크기를 조절하는 일입니다. 이러한 단계들은 대규모로 안정적인 소프트웨어를 출시하는 엔지니어와 결함이 있는 코드를 푸시하는 사람들을 구분 짓는 가장 큰 요소입니다. 에이전트들은 주니어 개발자가 그렇듯, 그저 그런 과정들이 눈에 보이지 않기 때문에 건너뛰는 것입니다. 보상 신호(reward signal)가 '작업 완료'를 향해 있지 '작업 완료 및 설계 문서 존재'를 향해 있지 않기 때문이죠. 따라서 우리는 시니어 엔지니어의 업무 뼈대(scaffolding)를 다시 끼워 넣어야 합니다. 'Agent Skills'는 그러한 뼈대를 만들기 위한 저의 시도입니다. 이 프로젝트는 이미 깃허브에서 2만 6천 개 이상의 스타를 받았고, 이러한 필요성을 느끼는 것은 저만이 아닌 것이 분명해 보입니다.

이 글은 README에서 다루지 않는 부분, 즉 각 설계 선택이 존재하는 이유, 이것이 표준 SDLC 및 구글의 공개된 엔지니어링 실무와 어떻게 연결되는지, 그리고 실제로 스킬을 단 하나도 설치하지 않더라도 이 프로젝트에서 무엇을 벤치마킹해야 하는지를 다룹니다.

'스킬(Skill)'이 실제로 의미하는 바 '스킬(skill)'이라는 단어는 Claude Code 및 Anthropic의 어휘에서 매우 중요한 역할을 하며, 이를 정확히 이해하는 것이 도움이 됩니다. 스킬은 상황이 필요로 할 때 에이전트의 컨텍스트에 주입되는 프론트매터(Frontmatter)가 포함된 마크다운 파일입니다. 시스템 프롬프트 조각과 런북(Runbook)의 중간 정도에 위치합니다. 스킬은 단순한 참고 문서가 아닙니다. '테스트에 대해 알아야 할 모든 것'을 담은 백과사전이 아닙니다. 그것은 하나의 워크플로우입니다. 즉, 에이전트가 따라야 하는 일련의 단계들이자, 증거를 생성하는 체크포인트들이며, 명확하게 정의된 종료 조건(exit criterion)으로 끝나는 과정입니다.

이 차이가 바로 핵심입니다. 에이전트의 컨텍스트에 테스트 모범 사례에 대한 2,000단어짜리 에세이를 넣으면, 에이전트는 그것을 읽고 그럴듯해 보이는 텍스트만 생성한 뒤 실제 테스트는 건너뜁니다. 하지만 워크플로우를 넣으면 (실패하는 테스트를 먼저 작성하고, 실행하여 실패하는 것을 확인한 뒤, 통과하기 위한 최소한의 코드를 작성하고, 통과하는 것을 확인한 후 리팩토링하기) 에이전트는 실제로 수행해야 할 작업을 갖게 되고, 당신은 그것을 검증할 수 있게 됩니다. 산문보다는 과정(Process)을. 참고 문서보다는 워크플로우를. 정해진 종료 조건이 없는 에세이보다는 종료 조건이 있는 단계를 택해야 합니다. 이 하나의 차이가 유용한 스킬과 그저 예쁘장한 마크다운 파일을 구분 짓습니다. 또한 이것은 왜 그토록 많은 'AI 규칙(rules)' 저장소들이 실제로는 아무런 효과가 없는지를 설명해 줍니다. 그 규칙들은 그저 에세이에 불과하니까요.

스킬이 구현하는 SDLC 이 저장소의 20가지 스킬은 6개의 수명 주기 단계를 중심으로 구성되어 있으며, 그 위에 7개의 슬래시 명령어(slash commands)가 존재합니다.

  • 정의(Define, /spec): 실제로 무엇을 만들 것인지 결정하는 단계입니다.
  • 계획(Plan, /plan): 작업을 분해하는 단계입니다.
  • 빌드(Build, /build): 수직적 단위(Vertical slices)로 구현하는 단계입니다.
  • 검증(Verify, /test): 작동함을 증명하는 단계입니다.
  • 리뷰(Review, /review): 빠뜨린 부분을 찾아내는 단계입니다.
  • 배포(Ship, /ship): 사용자에게 안전하게 전달하는 단계입니다.

그리고 /code-simplify 명령어가 이 모든 과정의 기본 바탕으로 자리 잡고 있습니다.

이것은 결코 우연의 일치가 아닙니다. 이는 모든 기능이 정상적으로 작동하는 엔지니어링 조직이 운영하는 것과 동일한 SDLC이며, 단지 다른 용어를 사용할 뿐입니다. 구글은 이를 설계 문서(Design doc) → 리뷰 → 구현 → 가독성 리뷰(Readability review) → 출시 체크리스트(Launch checklist)라고 부릅니다. 아마존은 일하는 백워드(Working-backwards) 메모와 바 레이저(Bar raiser)라고 부릅니다. 모든 건강한 팀은 이러한 루프의 변형된 버전을 가지고 있습니다.

AI 코딩 에이전트의 새로운 점은 대부분의 에이전트가 기본적으로 이러한 단계의 대부분을 건너뛴다는 것입니다. 기능을 요청하면 구현 결과를 얻게 되지만, 명세서, 계획, 테스트, 리뷰 및 출시 체크리스트는 그저 발생하지 않는 일이 되어버립니다. 스킬(Skills)은 에이전트를 올바른 궤도로...

원문 보기
원문 보기 (영어)
A senior engineer’s job is mostly the parts that don’t show up in the diff. Specs. Tests. Reviews. Scope discipline. Refusing to ship what can’t be verified. AI coding agents skip those parts by default. Agent Skills is my attempt to make them not optional. The default behaviour of any AI coding agent is to take the shortest path to “done.” Ask for a feature and it writes the feature. It does not ask whether you have a spec, write a test before the implementation, consider whether the change crosses a trust boundary, or check what the PR will look like to a reviewer. It produces code, declares victory, and moves on. This is the same failure mode every senior engineer has spent their career learning to avoid. The senior version of any task includes work that doesn’t show up in the diff: surfacing assumptions, writing the spec, breaking the work into reviewable chunks, choosing the boring design, leaving evidence that the result is correct, sizing the change so a human can actually review it. Those steps are most of what separates engineers who ship reliable software at scale from people who push code that breaks. Agents skip those steps for the same reason any junior would. They’re invisible. The reward signal points at “task complete” not “task complete and the design doc exists.” So we have to bolt the senior-engineer scaffolding back on. Agent Skills is my attempt at that scaffolding. It just crossed 26K stars, so apparently I’m not alone in wanting it. This post is the part the README doesn’t quite cover : why each design choice exists, how it maps onto standard SDLC and Google’s published engineering practices, and what you should steal from the project even if you never install a single skill. What a “skill” actually is The word “skill” is doing a lot of work in the Claude Code / Anthropic vocabulary, and it helps to be precise. A skill is a markdown file with frontmatter that gets injected into the agent’s context when the situation calls for it. Somewhere between a system-prompt fragment and a runbook. A skill is not reference documentation. It is not “everything you should know about testing.” It is a workflow: a sequence of steps the agent follows, with checkpoints that produce evidence, ending in a defined exit criterion. That distinction is the whole game. If you put a 2,000-word essay on testing best practices into the agent’s context, the agent reads it, generates plausible-looking text, and skips the actual testing. If you put a workflow there (write the failing test first, run it, watch it fail, write the minimum code to pass, watch it pass, refactor), the agent has something to do, and you have something to verify. Process over prose. Workflows over reference. Steps with exit criteria over essays without them. That single distinction separates a useful skill from a pretty markdown file. It also explains why so many “AI rules” repos end up doing nothing in practice. The rules are essays. The SDLC the skills encode The twenty skills in the repo organise around six lifecycle phases, with seven slash commands sitting on top. Define ( /spec ) is where you decide what you’re actually building. Plan ( /plan ) breaks the work down. Build ( /build ) implements it in vertical slices. Verify ( /test ) proves it works. Review ( /review ) catches what slipped through. Ship ( /ship ) gets it to users safely. /code-simplify sits across the bottom of the whole thing. This isn’t a coincidence. It’s the same SDLC every functioning engineering organisation runs, just in different vocabulary. Google calls it design doc → review → implementation → readability review → launch checklist. Amazon calls it the working-backwards memo and the bar raiser. Every healthy team has some version of this loop. What’s new with AI coding agents is that most agents skip most of these phases by default . You ask for a feature, you get an implementation, and the spec, plan, tests, review, and launch checklist all just don’t happen. Skills push the agent through the same phases a senior engineer forces themselves through, because shipping the code without them is how you produce incidents. A complex feature might activate eleven skills in sequence. A small bug fix might use three. The router ( using-agent-skills ) decides which apply. The point is that the workflow scales to the actual scope, not to the assumed scope. Five principles that are doing the work Five design decisions in the project are the load-bearing ones. The rest of the system follows from them. 1. Process over prose Already covered. Workflows are agent-actionable; essays are not. The same is true for human teams. If your team handbook is 200 pages, no one reads it under time pressure. If it’s a small set of workflows with checkpoints, people actually run them. 2. Anti-rationalization tables This is the most distinctive design decision in the project, and the one I most want other teams to steal. Each skill includes a table of common excuses an agent (or a tired engineer) might use to skip the workflow, paired with a written rebuttal. A few examples close to the originals: “This task is too simple to need a spec.” → Acceptance criteria still apply. Five lines is fine. Zero lines is not. “I’ll write tests later.” → Later is the load-bearing word. There is no later. Write the failing test first. “Tests pass, ship it.” → Passing tests are evidence, not proof. Did you check the runtime? Did you verify user-visible behaviour? Did a human read the diff? The reason this works is that LLMs are excellent at rationalisation. They will produce a plausible-sounding paragraph explaining why this particular task doesn’t need a spec, or why this particular change is fine to merge without review. Anti-rationalization tables are pre-written rebuttals to lies the agent hasn’t yet told. The pattern is just as good for human teams. Most engineering decay isn’t anyone choosing to do bad work. It’s people accepting plausible-sounding justifications for skipping the parts they don’t feel like doing. A team that writes down its anti-rationalizations is a team that has fewer of them. 3. Verification is non-negotiable Every skill terminates in concrete evidence. Tests pass. Build output is clean. The runtime trace shows the expected behaviour. A reviewer signs off. “Seems right” is never sufficient. This is the same principle that makes Anthropic’s harness recover from failures, that makes Cursor’s planner/worker/judge split actually catch bugs, that makes any long-running agent recoverable. The agent is a generator. You need a separate signal that the work is done. Skills bake that signal into every workflow. 4. Progressive disclosure Do not load all twenty skills into context at session start. Activate them based on the phase. A small meta-skill ( using-agent-skills ) acts as a router that decides which skill applies to the current task. This is the harness engineering lesson applied at skill granularity. Every token loaded into context degrades performance somewhere, so you load what’s relevant and leave the rest on disk. Progressive disclosure is how you get a twenty-skill library into a 5K-token slot without poisoning the well. 5. Scope discipline The meta-skill encodes a non-negotiable I’d staple to every agent if I could: “touch only what you’re asked to touch.” Don’t refactor adjacent systems. Don’t remove code you don’t fully understand. Don’t brush against a TODO and decide to rewrite the file. This sounds obvious until you watch an agent decide that fixing one bug requires modernizing three unrelated files. Scope discipline is the single biggest determinant of whether an agent’s PR is mergeable or has to be unwound. It’s also the principle that maps most cleanly onto Google’s code review norms, where reviewers will block a PR for doing more than one thing. The Google DNA The skills are saturated with practices from Software Engineering at Google and Google’s public engineering culture. This is intentional. Most of what ma