AI 에이전트 스킬: Delphi, C++Builder 및 .NET
AI 어시스턴트는 eSeGeCe 소스를 한 번도 읽어 본 적이 없습니다. 그래서 존재하지 않는 속성을 지어내고, 컴포넌트를 엉뚱한 유닛에 넣습니다. 에이전트 스킬은 각 라이브러리의 진짜 공개 API를 어시스턴트에게 알려 줍니다. 무료이고 MIT 라이선스이며, 한 줄로 설치됩니다.
AI 어시스턴트는 eSeGeCe 소스를 한 번도 읽어 본 적이 없습니다. 그래서 존재하지 않는 속성을 지어내고, 컴포넌트를 엉뚱한 유닛에 넣습니다. 에이전트 스킬은 각 라이브러리의 진짜 공개 API를 어시스턴트에게 알려 줍니다. 무료이고 MIT 라이선스이며, 한 줄로 설치됩니다.
Delphi로 WebSocket 클라이언트를 만들어 달라고 하면, 구조는 반듯하지만 미묘하게 틀린 코드가 돌아옵니다. 모델이 부주의해서가 아닙니다. 이 라이브러리를 한 번도 본 적이 없기 때문입니다.
이 모델들은 공개된 코드로 학습했습니다. eSeGeCe 컴포넌트는 상용 제품이므로 그 소스가 학습 데이터에 들어간 적이 없습니다. 모델은 Delphi 컴포넌트 라이브러리의 생김새를 알아보고, 나머지는 자신이 아는 다른 라이브러리에서 가져와 채웁니다. 그 결과 네 가지 실패 유형이 나타나며, 네 가지 모두 그럴듯해 보이는 코드 가운데 어느 줄이 틀렸는지 찾아내는 데 똑같이 20분을 쓰게 만듭니다.
저희가 실제로 만들었을 법하게 읽히지만 존재하지는 않는 속성이나 이벤트입니다. 그 사실을 가장 먼저 알려 주는 것은 컴파일러입니다.
컴포넌트는 실제로 있지만 uses 절이 틀렸습니다. 생성된 sgcWebSockets 코드가 빌드되지 않는 가장 흔한 원인입니다.
모델이 오래된 예제의 일부를 본 적이 있다면, 저희가 이름을 바꾸었거나 제거한 메서드를 아무 거리낌 없이 그대로 다시 써 냅니다.
저희 쪽에서는 컴파일되지만 고객 쪽에서는 되지 않는 코드입니다. 사용된 컴포넌트가 고객 라이선스에 포함되지 않은 에디션을 요구하기 때문입니다.
스킬은 실행되는 플러그인이 아니고, 무언가로 학습된 모델도 아닙니다. Markdown 파일이 담긴 폴더일 뿐이며, 그 구조는 의도적으로 단순합니다.
모든 스킬은 몇 줄짜리 frontmatter로 시작하며, 에이전트가 항상 눈앞에 두고 있는 부분은 description뿐입니다. 이 설명은 해당 스킬이 어떤 라이브러리의 어떤 영역을 다루는지 평이한 말로 알려 줍니다.
비용이 낮게 유지되는 이유가 여기에 있습니다. 관련 없는 질문을 하는 동안 에이전트가 수천 줄짜리 API 레퍼런스를 들고 다니지 않기 때문입니다.
---
name: sgcwebsockets-mq
description: Use when connecting Delphi or
C++Builder code to a message broker with
sgcWebSockets: MQTT, STOMP including
RabbitMQ and ActiveMQ, AMQP 0.9.1, AMQP
1.0, Kafka and WAMP2.
compatibility: Requires Delphi 7 to Delphi
13, or C++Builder 2007 to 13.
---
MQTT 브로커에 대해 물으면 그 설명이 들어맞아 에이전트가 메시지 브로커 스킬을 불러옵니다. 다른 것은 열리지 않습니다. 대신 WebRTC를 물으면 다른 스킬이 열립니다.
스킬 안에서는 사람이 하는 것과 같은 방식으로 길을 찾습니다. 컴포넌트 색인에서 컴포넌트를 찾고, 그 컴포넌트의 API 페이지를 열고, 값이 필요한 옵션 클래스가 있으면 그 타입 페이지를 엽니다.
sgcwebsockets-mq/
SKILL.md
reference/
components-index.md
api/TsgcWSPClient_MQTT.md
types/TsgcWSMQTTLWT_Options.md
examples/TsgcWSPClient_MQTT.md
concepts/overview.md
API 페이지는 사람이 손으로 쓰지 않습니다. 생성기가 릴리스마다 라이브러리를 파싱해 public 및 published 영역을 뽑아냅니다. 각 컴포넌트와 그 속성, 메서드, 이벤트, 컴포넌트가 속한 유닛, 그것을 포함하는 에디션, 그리고 그 멤버들이 사용하는 타입까지 담깁니다.
그래서 스킬은 고객이 실제로 가지고 있는 버전을 설명합니다. 손으로 관리하는 문서처럼 실제와 어긋날 수 없고, 지난달에 추가된 컴포넌트도 출시 당일에 스킬에 들어 있습니다.
unit: sgcWebSocket_Protocols
Edition: Standard
| Delphi | Type |
| `Client: TsgcWebSocketClient` | ... |
| `MQTTVersion: TwsMQTTVersion` | ... |
| `LastWillTestament: ...` | ... |
생성된 표는 무엇이 존재하는지를 에이전트에게 알려 줍니다. 하지만 프로토콜 컴포넌트가 소켓을 직접 갖지 않는다는 것, 전송 클라이언트에 연결해서 쓴다는 것, 1883 포트의 브로커에서는 Specifications.RFC6455를 False로 설정해야 한다는 것까지는 알려 주지 못합니다.
그래서 각 스킬은 라이브러리를 직접 만든 사람들이 쓴 플레이북으로 시작합니다. 언제 사용하는지, 코드를 쓰기 전에 무엇을 확인해야 하는지, 그리고 실제로 사람들이 자주 걸려 넘어지는 실수가 담겨 있습니다.
## Things that catch people out
- Setting Active = true on the protocol
component does nothing useful. The
transport client owns the connection.
- One transport carries one protocol.
- MQTT has two heartbeats, and they are
different mechanisms with the same name.
세 가지 에이전트는 플러그인을 직접 설치합니다. 나머지는 폴더를 읽으므로 폴더 하나를 복사해 넣으면 됩니다. 그 뒤로는 따로 호출할 것이 없습니다. 어떤 스킬이 필요한지는 에이전트가 알아서 판단합니다.
/plugin marketplace add esegece-com/agent-skills
/plugin install sgcwebsockets-delphi@esegece
마켓플레이스는 한 번만 추가하고, 그다음에는 사용하는 만큼 플러그인을 설치하십시오. /skills는 현재 활성화된 스킬을 보여 줍니다. 나중에 두 번째 제품을 설치할 때는 마켓플레이스 단계를 다시 거치지 않아도 됩니다.
codex plugin marketplace add esegece-com/agent-skills
codex plugin add sgcwebsockets-delphi@esegece
codex plugin list
Codex는 plugin install 대신 plugin add를 사용하며, 마켓플레이스 이름은 동일합니다.
저장소를 클론한 다음, plugins/<plugin>/skills/에서 원하는 스킬 폴더를 에이전트가 감시하는 디렉터리로 복사하십시오. 프로젝트 수준이 전역보다 우선하므로, 저장소 안에 넣어 둔 스킬은 그 프로젝트에만 적용됩니다.
| 에이전트 | 프로젝트 수준 | 전역 |
|---|---|---|
| Claude Code | .claude/skills/ | %USERPROFILE%\.claude\skills\ |
| GitHub Copilot | .github/skills/ | %USERPROFILE%\.copilot\skills\ |
| Cursor | .cursor/skills/ | |
| Codex CLI | .agents/skills/ | |
| JetBrains Junie | .junie/skills/ | %USERPROFILE%\.junie\skills\ |
Copilot 경로는 Visual Studio, VS Code, Copilot CLI가 모두 동일하게 읽습니다. VS Code에서는 "Chat: Use Agent Skills" 설정을 활성화하거나, 명령 팔레트에서 "Chat: Install Plugin From Source"를 실행하고 저장소 URL을 입력하십시오.
어시스턴트가 더 똑똑해지는 것이 아닙니다. 저희 라이브러리에 대해 추측하기를 멈추는 것입니다.
멤버가 비슷한 모양새에서가 아니라 생성된 API에서 나오므로, 답변에 담긴 속성과 이벤트는 컴포넌트가 실제로 published로 노출하는 것들입니다.
모든 API 페이지는 컴포넌트가 속한 유닛을, .NET의 경우에는 해당 네임스페이스 하나를 명시합니다. 이것만으로도 가장 잦은 빌드 실패가 사라집니다.
각 컴포넌트에는 필요한 최소 에디션이 함께 적혀 있으므로, 어시스턴트는 고객이 코드를 쓰기 전에 그 컴포넌트가 Enterprise를 필요로 한다는 사실을 알려 줄 수 있습니다.
스킬은 어느 부분이 문서화되어 있는지 분명히 밝힙니다. 열거형을 찾지 못한 어시스턴트는 그럴듯해 보이는 상수를 지어내는 대신 물어보도록 안내받습니다.
모든 예제는 제품과 함께 제공되는 데모에서 뽑아낸 것으로, 폼 전체가 아니라 해당 컴포넌트를 다루는 부분만 남겨 두었습니다.
릴리스마다 소스에서 다시 생성됩니다. 새 컴포넌트는 출시 당일에 문서화되고, 제거된 컴포넌트는 같은 날 사라집니다.
주제별로 나뉘어 있어서 MQTT 질문에는 메시지 브로커 스킬만 불러옵니다. 222개 컴포넌트 라이브러리의 나머지는 대화에 끼어들지 않습니다.
MIT 라이선스로 공개되어 있습니다. 아무것도 구매하기 전에 라이브러리를 평가해 보려고 설치할 수 있고, 그 자체로 문서로 읽어도 됩니다.
제품마다 플러그인 하나씩이며, sgcWebSockets는 하나의 큰 스킬 대신 여러 주제 스킬을 담은 플러그인으로 제공됩니다.
| 플러그인 | 스킬 수 | 다루는 범위 |
|---|---|---|
sgcwebsockets-delphi | 18 | WebSocket 코어, 메시지 브로커, sgc 서브프로토콜, 거래소 피드, AI 및 LLM, 서비스 통합, HTTP 및 전송 계층, 인증, P2P 및 WebRTC, IoT, 그리고 sgcHTML 위젯을 위한 여섯 가지 |
sgcwebsockets-dotnet | 7 | C#에서 사용하는 같은 라이브러리, 아래에서 설명하는 커버리지 페이지 포함 |
sgcsign-delphi | 1 | XAdES, PAdES, CAdES, Authenticode, RFC 3161 타임스탬프, OCSP 및 키 공급자 |
sgcopenapi-delphi | 1 | OpenAPI 파서, SDK 생성기, 서버 컴포넌트 |
sgcindy-delphi | 1 | 맞춤형 Indy TCP/IP 구현 |
sgcbiometrics-delphi | 1 | Windows Hello, 지문 및 얼굴 인증 |
이 라이브러리는 222개의 컴포넌트를 등록합니다. 이것을 하나의 스킬에 모두 담으면, 프로토콜 하나에 대한 질문에 답하려고 에이전트가 라이브러리 전체를 열어야 합니다. 느릴 뿐만 아니라 답변의 품질도 오히려 떨어집니다.
그래서 영역별로 나누었습니다. 각 스킬은 전체를 읽을 수 있을 만큼 작고, 정확히 선택될 만큼 구체적입니다. 그리고 상위 색인이 "어떤 컴포넌트가 필요한가"라는 물음에 답해 알맞은 스킬로 안내합니다.
출시된 .NET 어셈블리는 Delphi 라이브러리가 등록하는 222개 컴포넌트 가운데 70개를 노출합니다. 어시스턴트가 존재하지 않는 C# API를 즉석에서 지어내게 두느니, 이 사실을 그대로 밝히는 편을 택했습니다.
그래서 .NET 플러그인에는 Delphi 전용인 152개를 각각이 속한 유닛과 함께 나열한 커버리지 페이지가 생성되어 들어갑니다. 빌드 시점에 두 제품을 비교해 만들기 때문에, 계획이 아니라 고객이 가진 빌드를 그대로 설명합니다.
"이 플러그인을 설치하십시오"라는 말을 들으면 그것이 무엇을 하는지 묻는 것이 당연하므로, 이 부분은 정확히 밝혀 둘 만합니다.
스킬은 Markdown입니다. 안에 코드가 없고, 고객 컴퓨터에서 실행되는 것이 없으며, 설치한다고 해서 프로젝트가 바뀌지도 않습니다.
텔레메트리도, 서버로 연결하는 동작도, 무엇을 물었는지에 대한 기록도 없습니다. 저희는 고객이 스킬을 설치했다는 사실조차 알지 못하며, 파일은 한 번 복사되면 오프라인에서도 동작합니다.
public 및 published 영역만 포함됩니다. 메서드 본문, private 필드, protected 멤버는 생성기가 제외하므로, 스킬을 설치해도 저희 구현이 누구의 디스크에도 놓이지 않습니다.
저장소는 MIT 라이선스이므로 그 구조를 자유롭게 복사하고 포크하고 변형할 수 있습니다. NOTICE 파일은 문서 내용 자체에 대한 권리를 유보하며, 그 부분은 저희 소유로 남습니다.
아닙니다. 공개되어 있고 무료입니다. 라이브러리를 담고 있는 것이 아니라 API를 설명하는 것이므로, 아무것도 구매하기 전에 필요한 기능을 하는 컴포넌트인지 읽어 보며 평가할 수 있습니다.
보통은 그럴 필요가 없습니다. 에이전트가 질문을 스킬 설명과 대조해 맞는 것을 불러옵니다. 굳이 지정하고 싶다면 Claude Code에서는 /, Copilot Chat에서는 # 뒤에 스킬 이름을 붙이면 됩니다.
설치 명령을 다시 실행하십시오. 폴더를 직접 복사해 넣으셨다면 새 폴더로 덮어쓰면 됩니다. 각 스킬이 어느 버전에서 생성되었는지는 frontmatter에 적혀 있으므로, 지금 읽고 있는 빌드가 무엇인지 언제든 확인할 수 있습니다.
대개는 두 쪽이 서로 다른 빌드를 보고 있는 경우입니다. 각 스킬에는 릴리스별 변경 사항을 정리한 reference/history.md가 들어 있으며, 해당 멤버가 고객 버전 이후에 추가된 것인지 확인하는 가장 빠른 방법입니다.
스킬 폴더나 지시문 폴더를 읽는 에이전트라면 가능합니다. 내용은 에이전트 전용 문법이 없는 평범한 Markdown이므로, 어떤 도구든 그 폴더를 가리키게 하면 동작합니다. 위 표의 다섯 가지 디렉터리는 널리 쓰이는 에이전트들의 관례일 뿐입니다.
그렇다면 그것은 문서의 결함이므로 저희에게 알려 주시면 감사하겠습니다. GitHub에 이슈를 등록하시거나 저희 문의 양식을 이용해 주십시오. 어떤 질문을 하셨고 어떤 답을 받으셨는지 함께 알려 주시면 둘 다 도움이 됩니다.