Monitoring a Volume Bot Run: The Watch Loop for a Live Hour
Monitoring is not staring at a screen. It is a loop with a fixed cadence, a fixed set of questions and a written record, so that the twentieth check is as useful as the first and you can tell drift from noise.
Watch card
- Applies to
- Any automated run that submits transactions on your behalf while you watch
- Needs
- A console or log you can read, chain access, and the plan you wrote before opening
- Produces
- A decision at every check, a run journal, and a baseline for the next run
- Stop reading if
- You have not yet written down what the run is supposed to do
Monitoring a volume bot run means running a fixed loop: take the same readings from the same sources on a set cadence, compare them to the plan you wrote before opening, decide on one of five responses including doing nothing, and write down what you saw and what you chose. Everything else, including watching a chart, is entertainment with a cost attached.
The loop matters more than any individual reading because the live window degrades your judgement. An hour in, you are tired, you have a sunk sense of investment, and a single unusual minute looks like a pattern. A written cadence and a written question set are what keep the twentieth check as honest as the first one.
What monitoring means once the run is open
Before the run, monitoring is a design problem: deciding what will be visible, where it will be visible, and what will alert. That work belongs to configuration and cannot be done well while the run is live. Once the first transaction is submitted, monitoring becomes something narrower and more demanding: repeatedly answering whether the thing happening is the thing you planned.
That narrowing is useful. It means a live check is not an invitation to reconsider the strategy. The strategy was decided. A live check asks whether execution matches the decision, and if it does not, whether the gap is large enough and persistent enough to justify a response. Strategy questions that surface mid-run go in the journal and get answered afterwards.
It also means monitoring produces an output every time. A check that ends without a recorded decision, even a decision to keep watching, is a check you will not be able to reconstruct later. When something goes wrong at minute forty, the value of the record is that it tells you what was true at minute twenty and what you thought about it then.
The four questions every check answers
Four questions cover the live window. They are ordered so that a failure of the first makes the rest irrelevant, which saves time when you are checking quickly from a phone.
- Is it still running? Not is the process alive, but is work still being produced. A process can hold a socket open for a long time after it has stopped doing anything useful.
- Is the work landing? Attempts are not outcomes. The gap between what the run tried to do and what the chain accepted is the single most informative quantity in the window.
- Is it still the run I planned? The venue, the token, the wallets and the pace all have to match the plan. Any one of them can drift without producing an error.
- Do I have what I need to continue? Balances above their floors, an endpoint that is answering, and a person available to act if the answer to any question above turns bad.
Notice that none of these questions is about whether the run is working, in the sense of producing an outcome you like. That question cannot be answered during the window with any reliability, and trying to answer it is where most harmful mid-run interventions begin.
Where each answer actually comes from
Each question has a source of truth, and the source is not always the panel in front of you. A console reports what the software believes; the chain reports what happened. Those two things diverge in exactly the situations you most need accurate information, which is why the first check of any run should compare them at least once.
| Question | Source of truth | Convenient but weaker source | Why the difference matters |
|---|---|---|---|
| Is it still running? | Timestamp of the most recent submitted transaction | Process status, dashboard connection indicator | A live connection and an idle worker look identical from outside |
| Is the work landing? | Confirmed transactions, read from chain by signature | The tool's own success counter | Optimistic counters can record a submission as a success |
| Is it the planned run? | Token address and pool address in the confirmed transaction | The label shown in the interface | Labels are metadata; addresses are the thing being traded |
| Can it continue? | Account balances read directly | Cached balance in the run view | A cached balance can be minutes old at the moment it matters most |
If the run is executed by a hosted Solana volume bot rather than by scripts you maintain, the console is the correct source for intent, schedule and remaining budget, because it is the only place those exist. The chain remains the source for outcome. Keeping that division clear prevents the most common reporting error, which is treating a tool's summary of its own behaviour as an independent measurement of it.
Independent verification does not need to be constant. Confirming one signature per check against a public explorer, or against a getSignatureStatuses call on an endpoint you control, is enough to catch a console that has drifted out of sync. The Solana Explorer is adequate for spot checks; anything systematic should go through your own RPC access so you are not rate limited at the worst moment.
Commitment level is worth understanding before you use confirmations as evidence. A transaction that is processed is not yet a transaction that is finalized, and the difference has a real duration attached. The Solana developer documentation defines the levels, and the validator client documentation at docs.anza.xyz covers how confirmation progresses. During a live run, use the same commitment level for every reading, or your comparisons across checks are not comparisons at all.
Cadence: how often to look
Cadence should be decided before the run and written on the plan, because deciding it live means deciding it emotionally. The right cadence is dense at the start, sparse in the middle, and dense again at the end, for reasons that have nothing to do with how interesting each phase feels.
| Phase | Suggested shape | What the check is for | Cost of checking more often |
|---|---|---|---|
| Opening | Short interval, several checks | Establishing a baseline and catching configuration errors while they are cheap | Low; this is the one phase where dense checking pays |
| Steady state | Long, fixed interval | Detecting drift against the plan and confirming liveness | High; frequent looks generate intervention pressure without new information |
| Approaching the end | Shorter interval again | Confirming the plan completes and nothing is left half-executed | Low; the failure modes here are expensive and short-lived |
| After stop | Until settlement is confirmed | Catching in-flight transactions that land after you stopped watching | None; this is the phase operators most often skip |
The important property is that the interval is fixed rather than reactive. A reactive cadence, where you look more often because you are worried, samples your anxiety rather than the run. Fixed intervals also give the sampling windows in the signals framework something stable to sit on, since a window measured across irregular observations is not a window.
Illustrative arithmetic, to show the shape rather than to recommend a number: if a run is planned to last two hours and you check every two minutes throughout, that is sixty checks, each of which is an opportunity to intervene. If you check every thirty seconds during the first five minutes, every ten minutes through the middle, and every two minutes for the final ten, that is roughly twenty-five checks, weighted toward the phases where a check can actually change an outcome. Substitute your own durations; the ratio is the point.
The first check after start
The opening check is different from every check that follows because it establishes the baseline everything else is compared against. Do it in a fixed order, and do it slowly, because a configuration error caught in the first minute costs almost nothing and the same error caught in the fortieth costs the whole run.
- Confirm it started, not that it was accepted. Look for a submitted transaction, not for a green start indicator. A queued job and a live run are different states and they look the same in most interfaces.
- Verify one transaction independently. Take a signature and confirm it outside the tool that produced it. This is the only moment in the run where you cheaply establish that the console and the chain agree.
- Check the venue and the token address. Read the address, not the ticker. Two tokens can share a name; they cannot share an address.
- Record opening balances. Every participating wallet and the reserve. Reconciliation at the end compares against this line, and if it does not exist, reconciliation becomes guesswork.
- Take a baseline health reading. Attempts, outcomes and error classes in the opening minutes. Label it a baseline, not a result, because early readings are systematically unrepresentative.
- Write the first journal line. Time, observation, decision, and the time of the next scheduled check. The next-check time is what turns a loop into a loop.
The run journal
The journal is the deliverable of the live window. It costs one line per check, it takes seconds, and it is the difference between a post-run review that produces improvements and one that produces recollections. A journal line does not need prose; it needs the same four fields every time.
The example above uses placeholder times and observations to show the shape; the values are not measurements of anything. The fourth column is the one people leave out and the one that does the most work, because it converts a vague intention to keep an eye on things into a commitment with a timestamp.
Three rules keep a journal useful. Write the decision even when the decision is nothing, because a run where you decided nothing eleven times in a row is a fact worth knowing. Never edit a line after the fact; append a correction instead. And record the reading that made you act, not just the action, or the next run inherits your conclusion without your evidence.
Silent failure: what watching cannot see
The failures that hurt are the ones that produce no error. A run can be technically healthy and substantively wrong in several ways at once, and none of them will raise an alert unless you specifically decided in advance that they should.
- Working on the wrong target. Every transaction lands, the panel is green, and the address being traded is not the one you meant. Nothing in the execution path knows your intent.
- Succeeding at a reduced size. A run that silently falls back to a smaller size per action can report a high success rate while doing a fraction of the planned work.
- Repeating instead of progressing. A retry loop that never advances its cursor produces steady activity and no progress against the plan.
- Draining unevenly. One account carrying the whole run while others sit idle looks fine in aggregate and is a structural problem the aggregate hides.
- Stalling upstream. An endpoint that answers but returns stale data keeps every indicator alive while the information behind them stops changing.
The defence against all five is the same and it is boring: compare against the plan rather than against zero. A check that asks whether anything is broken will pass. A check that asks whether the run has completed the share of the plan it should have completed by now will not.
Reading a panel that has stopped moving
A quiet panel has two possible meanings and they are opposite. Either the run is proceeding calmly and there is nothing to report, or the pipe that feeds the panel has broken and you are looking at a photograph. Operators reliably read the first meaning, because it is the comfortable one.
Distinguishing them requires a signal that changes even when nothing interesting happens. A timestamp of last activity that updates on every loop iteration, including iterations that do nothing, is the simplest version. If the newest thing on your screen is older than the interval the run is supposed to work on, you have a liveness problem and not a calm run, and liveness problems get worse the longer they are read as calm.
Build that check into the loop rather than into your instincts. The question is not whether the panel looks alive but whether the newest item on it is younger than your threshold for staleness, and that threshold, like every other threshold on this site, is one you set before the run rather than one anybody can set for you.
The cost of watching too hard
Attention is not free and it is not neutral. Each additional check raises the chance you will act on noise, and each action taken on noise contaminates the record you will use to set thresholds for the next run. Over-watching does not just waste an evening; it degrades the data.
It also concentrates your attention in the wrong phase. Operators who watch continuously through the middle of a run are usually the same ones who stop watching the moment they press stop, which is precisely when in-flight transactions are still landing and the final ledger is still moving. A fixed cadence redistributes attention toward the phases where attention changes outcomes.
If you find yourself checking off-schedule, treat that as a signal about you rather than about the run. Write it in the journal as an unscheduled check with the reason. Over several runs, that column tells you which conditions make you anxious, which is genuinely useful information for designing alerts that let you leave the screen alone.
The live watch checklist
Short enough to read on a phone, in the order that fails fastest. If any line cannot be answered from the sources you have, the gap is in your setup, and the live window is not the time to close it.
- The newest item in the run view is younger than my staleness threshold.
- At least one transaction from this run has been confirmed outside the tool that produced it.
- The token address and venue in a confirmed transaction match the plan.
- No participating wallet has fallen below the floor I funded it to.
- The completed share of the plan is roughly where the schedule says it should be.
- Every failure I can see has an error class I recognise, not a generic message.
- I know what my stop conditions are without looking them up.
- The last journal line has a next-check time and it has not passed.
- Somebody is available to act if the next check is bad, and that person knows it.
Handing the watch over
Runs outlast attention spans. A handover that consists of saying it looks fine is not a handover, because the incoming operator inherits the screen without the context that makes the screen meaningful. Three things transfer: the plan, the journal, and the stop conditions with their owner.
The plan transfers what the run is supposed to accomplish and by when. The journal transfers what has already been noticed and decided, which prevents the incoming operator from rediscovering a known quirk as an emergency. The stop conditions transfer authority, and that transfer has to be explicit: either the incoming person may execute a stop, or they may not and must escalate. Ambiguity there produces the worst outcome available, which is a condition met and nobody willing to act on it.
Write the handover as a journal line like any other, with both names in it. It is the one line in the record that explains why the handwriting changed, and in a review a week later that turns out to matter more than it sounds.
What the loop is actually for
The point of a watch loop is not to catch every problem. It is to make sure that the problems you do catch are caught early, that the ones you miss are visible afterwards in a record you trust, and that your hands stay off the controls the rest of the time. A run watched this way produces two outputs: whatever it was supposed to produce, and a journal that makes the next run better calibrated than this one.
When a reading finally is uncomfortable, the question is no longer whether to look more closely. It is which response the reading justifies, and that decision has its own ladder with its own rules, starting with the possibility that the correct response is to take a second reading and nothing else.
Filed under Live run by The Run Desk. Thresholds on this page are lines an operator sets in advance, not values the desk has measured. Any arithmetic is worked in full so you can substitute your own inputs, and the method is described in how the desk works.