> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lynxops.co/llms.txt
> Use this file to discover all available pages before exploring further.

# 가드레일

> 위험한 도구 호출이 실행되기 전에 로컬 정책을 평가합니다.

`guardTool()`은 도구 함수를 로컬 정책 검사로 감쌉니다. 정책은 실제 도구 호출 전에 실행됩니다. 정책이 차단을 결정하면 도구 함수는 실행되지 않습니다.

```ts theme={null}
import { LynxPolicyError } from "@lynx/sdk";

const refund = lynx.guardTool(
  "refund",
  async ({ amount }: { amount: number }) => {
    return { refunded: amount };
  },
  {
    riskLevel: "HIGH",
    sideEffect: true,
    failureMode: "FAIL_CLOSED",
    beforeCall: ({ input }) => ({
      action: input.amount <= 100 ? "ALLOW" : "BLOCK",
      policyId: "refund-limit",
      reason: "Refund amount is over the limit",
      severity: "HIGH",
    }),
  },
);

try {
  await lynx.run("SupportAgent", () => refund({ amount: 500 }));
} catch (error) {
  if (error instanceof LynxPolicyError) {
    console.log(error.action, error.policyId, error.reason);
  }
}
```

## 정책 판단

`beforeCall`은 다음 action 중 하나를 반환할 수 있습니다.

| Action             | 동작                                                            |
| ------------------ | ------------------------------------------------------------- |
| `ALLOW`            | 도구를 실행합니다.                                                    |
| `WARN`             | 도구를 실행하고 warning을 기록합니다.                                      |
| `BLOCK`            | 도구를 차단하고 `LynxPolicyError`를 던집니다.                             |
| `REQUIRE_APPROVAL` | 도구를 차단하고 `LynxPolicyError`를 던집니다.                             |
| `REDACT`           | 판단을 기록합니다. 실제 redaction은 policy callback에서 적용한 뒤 도구에 넘기세요.    |
| `MODIFY`           | 판단을 기록합니다. 실제 modification은 policy callback에서 적용한 뒤 도구에 넘기세요. |

## Failure mode

정책 평가 자체가 실패하면 `failureMode`에 따라 동작이 달라집니다.

| Failure mode       | 동작                               |
| ------------------ | -------------------------------- |
| `FAIL_OPEN`        | 도구 호출은 허용하고 policy error를 기록합니다. |
| `FAIL_CLOSED`      | 도구 호출을 차단합니다.                    |
| `REQUIRE_APPROVAL` | `REQUIRE_APPROVAL` 상태로 차단합니다.    |

## 서버 가용성

가드레일 판단은 로컬에서 이루어집니다. Lynx 서버가 내려가도 SDK는 계속 정책을 평가합니다. 정책 판단 데이터는 큐에 보관했다가 나중에 다시 전송합니다.
