← Back to Blog
vibe-codingdevopscursordeploymentvps

I was the copy-paste layer between Claude Code and my server.

March 31, 2026·5 min read·Dmitry @ mttrly

Two windows open. Claude Code on the left with a command I need to run. Terminal on the right with my server. I read the left window, copy the text, switch over, paste it, hit Enter. An error comes back. I copy the error, switch back, paste it into Claude Code. It thinks, produces the next command. I copy again. Paste again. Another error.

At some point I caught myself thinking: I'm doing exactly what a courier does. You could replace me with a two-line script. And yet here I am, at 3am, a copy-paste middleman between two systems that each know their job infinitely better than I do.

If you're a vibe-coder — someone who builds products with Cursor and Claude Code but isn't a developer or a DevOps engineer — you probably know this moment. The product works locally. You built it, it does what you wanted. And then comes deploy. And that's it.

The pattern that shows up in two different forms

For a long time I thought the problem was that I'd chosen the "wrong" way to deploy. I switched approaches and discovered the pattern was identical — just in a different interface.

With manual deployment through a terminal, it goes like this: Claude Code tells you what to do → you copy the command into the terminal → something goes wrong → you copy the output back → Claude Code suggests the next step → repeat. Claude Code knows what to do. The server knows what's happening. The only element in this system that understands nothing is you. And you're the one in the middle.

With CI/CD through GitHub Actions it's the same story, just slower and more painful. You push a commit → Actions fails with an error → you open a log that looks something like "exit code 1, see line 847" → you copy all of that into Claude Code → it fixes something in the config → you push again → different error → repeat. Average cycle: twenty minutes, if you're lucky.

I spent a few weeks thinking this was normal. That this is just how the world of deployment works and you have to learn to live with it. Then I realized: no.

40 minutes on a 30-second problem

Here's a specific case. I was deploying a new version of mttrly to a VPS. Actions failed. The log was long and incomprehensible — something about a database connection, something about a timeout, several lines in red.

I dutifully sent all of it to Claude Code. It suggested a few things — update a package version, check ports, fix the nginx config. I did all of this, one step at a time. Pushed each time. Actions failed each time, sometimes with the same error, sometimes with a new one.

Forty minutes later, it turned out that .env on the server was missing the DATABASE_URL variable. Literally one line. For someone who knows where to look and what these error messages mean — thirty seconds of work. For me — forty minutes of stumbling in the dark, because I didn't know that a "connection refused" error during deploy almost always means exactly this.

And it wasn't that I wasn't smart enough or didn't try hard enough. It's that I couldn't see the context. Claude Code only saw what I was feeding it. The server knew everything but couldn't explain it in plain language.

The insight that changed how I think about this

At some point it became clear: both cycles — manual deploy and CI/CD — are the same problem. Not a technical one, but an architectural one. I'm standing between two systems trying to connect them by hand. And all of this pain goes away in exactly one way: you need an agent that lives on the server, sees the context — logs, environment variables, service states — and explains what's happening in plain language.

Not "exit code 1". But "you're missing DATABASE_URL in your .env, add it like this".

Not "connection refused at 127.0.0.1:5432". But "PostgreSQL isn't running, here's the command to start it".

The difference between those two response formats is the difference between forty minutes and thirty seconds. That's not a metaphor — that's literally what happened in that specific deploy with the missing .env variable.

This is why mttrly exists — as a direct answer to this pattern. The agent knows the state of your server, sees errors as they happen, and can explain exactly what went wrong without you having to play broken telephone through a terminal window. It also works through the Telegram integration, so you can get a notification with a human-readable explanation on your phone without opening either of those two windows.

If this sounds familiar

Vibe-coding isn't about knowing everything. It's about building fast, with tools that take the technical details off your plate. Deployment in 2026 shouldn't be an exception to that rule.

If you've also spent nights playing the role of a copy-paste layer — mttrly has a free Watchdog tier for one server. Monitoring, Telegram alerts, human-readable explanations. No credit card. It won't fix your CI/CD pipeline for you, but it will tell you in plain language what's wrong — which is the thirty seconds you keep spending forty minutes on.

mttrly.com — free for one server.

Try it yourself

Stop SSHing. Start asking.

Free watchdog tier. AI features from $39/mo. No credit card required.

GET YOUR DEPLOYMENT BRO →