> For the complete documentation index, see [llms.txt](https://docs.syndromics.xyz/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.syndromics.xyz/using-syndromics/keepers.md).

# For keepers and liquidators

Syndromics depends on independent actors to trigger auctions, accept refinances on lenders' behalf and keep borrowers informed. All keeper software is open source, and the incentives are on-chain.

## Roles

| Role        | What they do                                                                                | Incentive                                                     |
| ----------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------- |
| Keeper      | Call `startAuction` when a loan is liquidatable; send alerts; accept refinances for lenders | 1 point of the 3% liquidation penalty for the auction trigger |
| Liquidator  | Buy collateral in a Dutch auction                                                           | The spread between auction price and fair value               |
| Arbitrageur | Buy in the auction and hedge or sell elsewhere                                              | Same                                                          |

Receiving collateral (as a buyer or in kind) requires the `LIQUIDATOR` attestation. Triggering an auction does not.

## Running a keeper

The reference keeper is a TypeScript service that reads from the indexer and submits transactions with its own key.

1. Subscribe to the indexer's loan feed.
2. For each active loan, compute HF from `OracleRouter.quote()` with the current session.
3. If HF is below 1.10, fire the borrower's registered alerts.
4. If HF is below 1.00 or the loan is Defaulted, and `sequencerGrace` is false, call `startAuction(loanId)`.
5. For lenders who delegated refinance acceptance, watch open refinance auctions and submit the pre-signed acceptance when the rate reaches their limit.

The keeper is stateless apart from its key. Several can run at once; the first `startAuction` to land earns the keeper share.

## Participating in auctions

1. Watch `AuctionStarted` events.
2. Fetch the current price from `currentPrice(loanId)`; it declines linearly from `oracle × 1.03` to the floor over about 45 minutes.
3. Obtain a Chainlink Data Streams report for the collateral token.
4. Call `buy(loanId, collateralAmount, streamReport)`. The contract verifies the report on-chain and reverts if the stream price diverges from the feed beyond tolerance. Partial buys are allowed.

During closed sessions the floor is bounded at `oracle × 0.85`, and slices whose lenders set `noClosedMarketLiquidation` are excluded from the auction.

## Ordering considerations

Robinhood Chain's sequencer is first-come-first-served. If Timeboost is enabled in future, express-lane access could affect who lands `startAuction` or a `buy` first; the auction design will be reviewed for that case and any change published. See [Sequencer and chain risk](/risk/sequencer-and-chain.md).

## What keepers cannot do

* They cannot liquidate a healthy loan; `startAuction` reverts unless the on-chain conditions hold.
* They cannot set the price; the curve and floor are contract parameters.
* They cannot act during the post-outage sequencer grace period.
* They cannot receive collateral without an eligibility attestation.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.syndromics.xyz/using-syndromics/keepers.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
