모든 현대적인 플랫폼은 에이전트에게 동일한 세 가지 통합 옵션을 제공합니다: 등록할 MCP 서버, 저장하고 갱신할 API 키, 또는 에이전트에게 처음 두 가지를 수행하는 방법을 가르치는 스킬 파일. 설정해야 할 무언가. 유출될 무언가. 만료되는 무언가.
Oberik은 에이전트에게 SSH 액세스를 대신 제공합니다.
여기서 당신은 프록시 역할을 하므로, 실제로는 당신의 에이전트에게 SSH 액세스를 부여하는 것입니다.
1 ssh ssh.oberik.com
SSH는 코딩 에이전트가 Oberik과 상호작용해야 할 때마다 사용하는 표면입니다 (예: 워크스페이스 생성, 기능 상한 설정, 토큰 발행, 호스팅된 에이전트와 채팅 등). 설정 파일도, 환경 변수에 담긴 토큰도, 설치된 것도 없습니다. 여러분의 기기에는 이미 클라이언트가 있고, 관련된 단일 자격 증명을 처리하는 방법도 이미 알고 있습니다.
왜 MCP가 아닌가?
간단히 말해, 출력 문제 때문입니다.
MCP는 실제 문제를 해결했기 때문에 업계 표준이 되었습니다. 도구를 한 번 작성하면 모든 에이전트가 동일하게 호출할 수 있습니다. 우리는 MCP에 반대하는 것이 아닙니다. Oberik은 테넌트별로 호스팅하는 에이전트에 여러분의 MCP 서버를 직접 로드하며, 이는 에이전트가 도구에 연결하는 좋은 방법입니다. 여기서 우리는 다른 방향, 즉 무언가가 계정을 처음에 설정하는 방법에 대해 이야기하고 있습니다.
사용하기 쉬운 만큼, MCP에는 핵심적인 결함이 있습니다: 도구가 실행될 때 전체 출력이 모델의 컨텍스트로 푸시된다는 점입니다. 모델은 모든 내용을 읽어야 합니다. 텍스트가 도착할 때쯤이면 필터링이 이미 실패했기 때문에 "세 번째 필드만 원했을 뿐인데"라고 결정할 수 없습니다.
MCP는 원칙적으로 필터링과 페이지네이션을 지원합니다. 실제로는 누군가가 모든 도구에 이를 구축해야 하며, 바이브 코딩 덕분에 빠지는 경우가 자주 발생하면 모델은 원시 페이로드를 그대로 삼키고 토큰과 어텐션 비용을 지불하게 됩니다.
SSH를 사용하면 에이전트는 도구가 제공하는 뷰를 수용하는 대신 자신만의 뷰를 구성합니다.
1$ ssh ssh.oberik.com 'documents --json' | jq -r '.data[].name'2$ ssh ssh.oberik.com 'audit --limit 20 --json' | jq -r '.data[] | "\(.at) \(.command)"'
필터는 머신의 파이프에서 실행됩니다. 즉시, 무료로, 에이전트가 원하는 만큼 좁게. 모델은 10페이지 대신 한 줄만 읽습니다.
이것이 작동하게 하는 두 가지 요소가 있습니다. 첫째, 모든 응답은 {"ok":…, "command":…, "message":…, "data":…}와 같은 한 줄 형식을 사용합니다. 이는 jq가 출력을 읽는 의도된 방식이지, 우회 방법이 아닙니다.
JSON 모드는 또한 상호작용이 스트림을 방해하지 않도록 합니다. 명령어에 필수 필드가 누락된 경우, 양식을 열지 않고 무엇이 누락되었는지 알려줍니다. 명령어가 파괴적일 수 있는 경우, 확인을 위해 멈추지 않고 --yes와 함께 다시 실행하라고 알려줍니다.
여러 명령어가 있는 줄의 경우, 시작 부분에 format json;을 넣으세요. 그러면 형식이 한 번 설정되므로 플래그를 반복할 필요가 없습니다.
알아둘 만한 세부 사항이 하나 있습니다. 플래그는 따옴표 안에 들어가야 합니다. ssh ssh.oberik.com --json 'documents'는 작동하지 않는데, 이는 ssh가 대상 이후의 옵션을 자신의 것으로 처리하기 때문입니다. 플래그를 무시하고 클라이언트는 자체 사용법 출력으로 응답합니다. 해당 출력에는 Oberik이나 플래그가 언급되지 않으므로 호스트가 고장난 것처럼 보일 수 있습니다.
우리가 여기서 말하고자 하는 것은, 우리는 이 모델들이 컴퓨터를 사용하도록 훈련시켰으니, 컴퓨터를 사용하게 하라는 것입니다.

왜 API가 아닌가?
간단히 말해, 자격 증명 문제 때문입니다.
오해하지 마세요. Oberik에는 API가 있고 괜찮습니다. 프로덕션에서 여러분의 제품이 호출하는 것이며, SSH 게이트웨이 자체가 내부적으로 호출하는 것입니다.
하지만 호출자에게 요구하는 사항을 살펴보면:
- 토큰 받기
- 저장하기
- 갱신하기
- 로그와 모델의 컨텍스트에서 멀리 두기
이 모든 단계는 에이전트의 책임이 되며, 에이전트의 컨텍스트는 비밀을 보관하기에 안전한 장소가 아닙니다. 모델이 자신의 환경 변수를 에코하는 것을 본 사람은 누구나 이것을 알고 있습니다. 주의를 기울이면, 여러분이 가장 좋아하는 코딩 에이전트가 프롬프트에서 민감한 키를 감지할 때 기본적으로 눈을 감아주는 것처럼 행동한다는 것을 알게 될 것입니다. 그러나 에이전트에 붙여넣은 키는 단순히 셸 히스토리에 남는 것이 아닙니다. 또한 모델 제공자, 로그, 하네스가 유지하는 모든 기록으로 전송됩니다.
API는 존재하지만, 에이전트가 스스로 설정하도록 설계된 주요 경로는 아닙니다. SSH를 통해 에이전트는 운영 체제가 이미 보호하도록 만들어진 단일 자격 증명 유형인 SSH 키를 보유하며, 개인 키는 절대 전송되지 않습니다. Oberik에 인증하는 것은 모델의 컨텍스트에 비밀을 넣지 않습니다. 넣을 것이 없기 때문입니다.
왜 CLI가 아닌가?
간단히 말해, 구식화 문제 때문입니다.
CLI를 설치하는 것은 모든 통합자의 하네스에 요구하는 약속이며, 우리는 첫 발을 내딛는 입장에서 그렇게 대담해지고 싶지 않았습니다. 솔직히 말해, CLI는 기본적으로 제품의 고정된 복사본이기 때문에 우리는 CLI를 전혀 원하지 않았습니다. Oberik의 컨트롤 플레인은 더 많은 피드백을 받으면서 기능을 추가할 것이며, 이는 CLI로 갔다면 지속적으로 새 릴리스를 푸시하고 사용자에게 업데이트를 요청해야 했을 것임을 의미합니다.
우리는 SSH 표면이 작성되는 것이 아니라 생성되기 때문에 이 문제를 기본적으로 해결했습니다. 컨트롤 플레인의 모든 경로는 설명과 함께 등록되며, 그 설명이 SSH 명령어입니다. 대시보드에 추가된 경로는 SSH를 통해 즉시 나타나므로 게이트웨이 변경에 대해 걱정할 필요가 없습니다.
업데이트할 것이 없습니다. 설치된 것이 없기 때문입니다.
왜 스킬이 아닌가?
간단히 말해, 명령어 문제 때문입니다.
에이전트 직면 제품과 함께 제공되는 트렌드 접근 방식은 스킬입니다. 에이전트가 설치하여 제품을 호출하는 방법을 알려주는 작성된 절차입니다. 스킬은 진정으로 유용하지만, 기본적으로 멋진 README 파일입니다. 스킬은 문서일 뿐, 기능이 아닙니다. 에이전트에게 행동할 방법을 제공하지 않으며, 여전히 작동하려면 그 아래에 MCP나 API가 필요하고, 그 문제도 함께 물려받게 됩니다.
게다가 스킬은 변화하는 제품을 사용하는 방법의 고정된 복사본입니다. CLI와 동일한 구식화 문제입니다. 에이전트가 아무것도 하기 전에 컨텍스트에 자리 잡고, 표면이 요청 시 출력할 수 있는 명령어에 어텐션과 토큰을 소비합니다.
"에이전트가 Oberik이 무엇을 할 수 있는지 어떻게 알까"에 대한 우리의 답변은 설치하는 파일이 아닙니다. 에이전트를 위한 발견 호출입니다:
1$ ssh ssh.oberik.com 'discover' # 모든 명령어, 매개변수 및 유형2$ ssh ssh.oberik.com 'docs' # 모든 페이지, 다루는 내용3$ ssh ssh.oberik.com 'docs search capability' # 무언가를 언급하는 줄
표면은 연결 시점에 라이브 제품에서 스스로를 설명합니다. 그리고 docs는 문서 사이트와 동일한 텍스트이므로 어떤 것도 다른 것의 요약이 아닙니다. 명령어는 결코 구식화될 수 없습니다. 그것들이 제품 그 자체이기 때문입니다.
왜 SSH인가?
간단히 말해, 다섯 가지 문제를 모두 한 번에 해결합니다.
- 키는 에이전트가 실제로 보유할 수 있는 자격 증명입니다. SSH 키 인증은 수십 년 되었고, 수십억 번 검증되었으며, 프로토콜은 지문을 확인하기 전에 서명을 검증합니다. 우리는 여기서 바퀴를 재발명할 필요를 느끼지 못했습니다. 모델에게 비밀을 돌보라고 요구하는 것을 멈추고, 기계가 항상 만들어진 하나의 작업을 수행하도록 한 것뿐입니다.
- 비밀번호를 공유하지 않고도 루프에 남아 있습니다. 에이전트가 아직 키가 없는 경우, 예를 들어 Oberik에 처음 연결할 때, 장치 로그인 흐름을 시작합니다. 에이전트는
login link를 실행하고, 즉시 URL과 코드를 반환하여 둘 다 사용자에게 보여줍니다. 사용자는 자신의 브라우저에서 URL을 엽니다. 페이지는 첨부될 정확한 키 지문을 식별하고, 승인 또는 거부 옵션을 제공하며, 에이전트가 출력한 코드와 비교할 수 있는 코드를 보여줍니다. 한편 에이전트는login wait를 실행하고 사용자의 결정을 기다립니다. 이들은 의도적으로 분리된 명령어입니다. 하나의 명령어가 링크를 생성하고 동시에 기다렸다면, 에이전트는 요청이 만료된 후에야 링크를 사용자에게 보여줄 것입니다. 승인하면 키가 등록되고 모든 향후 연결은 자동으로 로그인됩니다. 더 이상 링크가 필요하지 않습니다. 프로세스가 비밀을 사용하지 않기 때문에 에이전트의 채팅 기록에 비밀이 기록되지 않습니다. - 출력은 파이프용으로 설계되었습니다. 명령어에
--json을 사용하거나 줄 시작 부분에format json;을 한 번 사용하면 모든 응답이 한 줄 봉투로 반환됩니다. 이는jq '.data[0].name'이 출력을 읽는 의도된 방식이지, 우회 방법이 아닙니다. 필터는 머신에서 실행되므로 모델은 필터링 후 남은 것만 봅니다. 오류는 동일한 봉투를 사용하며 기본 HTTP 상태를 포함합니다. 이를 통해 재시도가 429와 400을 구분할 수 있습니다. 파이프는 양방향으로도 작동합니다. 게이트웨이는 디스크를 읽을 수 없으므로 파일을 허용하는 명령어는 파일 이름을 인수로 받고 연결에서 파일 내용을 읽습니다. 예를 들어,ssh ssh.oberik.com 'document upload handbook.pdf' < handbook.pdf는 파일을 업로드합니다. - 설치 제로. 등록할 것, 저장할 것, 컨텍스트에 유지할 것이 없습니다. 에이전트 설정에 MCP 서버도, 환경 변수에 토큰도, PATH에 CLI도, 스킬 파일도 없습니다. 우리는 개발자 제품을 구축하므로 이미 존재하고 모든 에이전트가 사용 방법을 아는 도구인 SSH를 사용했습니다.
- 자기 설명적이고 의도적으로 신중합니다.
discover는 전체 명령어 카탈로그를 출력합니다. 모든 명령어, 매개변수 및 유형, 그리고 필요한 확인 요구 사항을 포함합니다. 카탈로그는 제품에서 실시간으로 생성됩니다. 또한 클라이언트에게 어떤 필드가 문자열 대신 파일 바이트를 기대하는지 알려주므로 업로드가 잘못 추측될 수 없습니다. 허용하지 않는 것은 행을 번호로 타겟팅하는 것입니다. 파괴적인 명령어는 이름이 필요하며, 서버는 연결에 의해 선택된 프로젝트에 대해 해당 이름을 확인합니다. Staging이 Support Bot이 선택된 상태에서 요청되면 서버는 400을 반환하고 워크스페이스를 그대로 둡니다.
가르칠 것이 없습니다. 표면이 스스로를 가르치기 때문입니다.
Oberik 로그인 흐름은 다음과 같습니다:

Oberik 로그인 흐름
제품에 SSH 문을 여는 것이 위험하지 않나요?
그것은 공정한 질문이지만, 현실은 거의 반대입니다.
게이트웨이는 자체 상태나 권한이 없습니다. 모든 명령어는 React 앱에서와 마찬가지로 HTTP 컨트롤 플레인 세션을 통해 실행됩니다. 따라서 SSH 클라이언트는 동일한 계정이 브라우저에서 할 수 있는 것 이상을 할 수 없습니다. 로그아웃하거나, 키를 취소하거나, 계정을 삭제하면 변경 사항이 즉시 적용됩니다. 취소할 다른 것이 없기 때문입니다.
이 터미널은 공개 인터넷에 노출되어 있으므로 누구나 익명으로 연결할 수 있습니다. 모든 명령어는 연결 ID, IP 주소, 키 및 결과를 포함하여 기록됩니다. 자격 증명은 절대 저장되지 않습니다. login으로 입력된 비밀번호나 --values를 통해 전달된 제공자 키는 기록이 작성되기 전에 <redacted>로 대체됩니다. 시스템은 또한 원래 명령어의 해시를 저장하여 반복된 명령어를 상호 연관시킬 수 있으면서도 자격 증명을 복구할 수 없게 만듭니다. 기록은 30일 또는 100,000개 명령어 중 먼저 도래하는 기준으로 보관됩니다.
반복된 로그인 실패는 잠금을 트리거하는 대신 느려집니다. 어떤 비밀번호를 사용했는지 잊어버린 사람은 큰 마찰 없이 계속 시도할 수 있는 반면, 잘못된 비밀번호를 사용하는 자동 재시도 루프는 점점 덜 유용해집니다. 그것이 의도된 절충안입니다.
요약
다른 모든 사람들은 에이전트에게 API, MCP 서버 또는 스킬 파일을 제공합니다. 우리는 터미널을 제공했습니다. 알고 보니 그것이 에이전트가 원했던 것이었습니다.





