← All AI Engineer talks

AI Engineer Europe 2026

Claws Out: Securing and Building with OpenClaw

Read the talk

Claws Out: Securing and Building with OpenClaw

Nick Taylor’s trusted-proxy contribution removes duplicated authentication work, then supports a live development loop from Discord to an MCP app inside ChatGPT.

From a talk by Nick Taylor

Before you start: Familiarity with reverse proxies, HTTP headers and basic React or TypeScript will help you follow the configuration and MCP app examples.

Why authenticate again behind a proxy?

Why should OpenClaw ask for another credential when an identity-aware proxy already controls access? Nick Taylor, a Montreal-based developer advocate at Pomerium, encountered exactly that friction. His February contribution addressed access to OpenClaw’s control plane: even after putting a proxy in front of it, he still had to supply a token for the WebSocket connection.

GitHub issue titled “Allow disabling auth with LAN binding for reverse proxy setups,” showing a summary and proposed solution beside the speaker.
A GitHub feature request proposes allowing proxy-managed authentication for LAN access.

The duplicated work extended to device pairing. An identity-aware proxy combines an identity provider, a policy engine and a reverse proxy—the pattern Taylor introduces through Google Cloud’s IAP. The identity provider establishes who is connecting; policy decides whether that identity may access the application; the proxy gates the connection. Pomerium is an open-core implementation of this approach, but OpenClaw still required its own setup after the proxy had admitted the user.

Taylor opened issue #1560, another user running Caddy supported the proposal, and maintainer Peter supplied the feature criteria. The existing flow required pasting an authentication token into the UI for the WebSocket connection. Taylor also reports that the UI put the token in a query string, a behavior he regarded as primarily appropriate for local use. Switching to his phone meant another pairing step, sometimes requiring him to return to another device to complete it.

The resulting trusted-proxy authentication contribution became his first merged OpenClaw contribution. Its central change was to let an explicitly trusted proxy supply the authentication boundary that the gateway had previously required users to satisfy separately.

0:150:31
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

0:15 · section reference included

Make the trust boundary explicit

The configuration separates which proxy is trusted from which headers carry identity. gateway.auth.mode selects trusted-proxy; gateway.trustedProxies contains one or more addresses for the proxy gating access to the gateway; and gateway.auth.trustedProxy contains the identity-header settings.

Within trustedProxy, userHeader identifies the header used as the user identity, requiredHeaders specifies headers that must be present, and optional allowUsers restricts accepted identities. Taylor describes a JWT-bearing header in his setup and leaves out allowUsers because Pomerium’s policies already determine who may enter. The distinction matters: trusting a header from an authorized proxy is not the same operation as independently validating a JWT signature.

A compact configuration using the email-identity and JWT-assertion separation shown in the current trusted-proxy guide looks like this; 192.0.2.10 stands for the deployment’s actual proxy address:

json

{
  "gateway": {
    "trustedProxies": ["192.0.2.10"],
    "auth": {
      "mode": "trusted-proxy",
      "trustedProxy": {
        "userHeader": "x-pomerium-claim-email",
        "requiredHeaders": ["x-pomerium-jwt-assertion"]
      }
    }
  }
}

The proxy must control the forwarded identity headers, and clients must not be able to bypass it and impersonate that trusted source. Configuration is available through onboarding or the terminal UI.

For Taylor’s demonstrated version, the practical result was no separate WebSocket token and no repeated device pairing. He describes the security improvement as potential, while the reduction in setup friction is immediate. Current OpenClaw documentation adds an explicit browser-approval policy: one-time approval remains required unless deviceAutoApprove is enabled, and its default is false. The recording’s pairing behavior therefore should not be assumed for a current installation.

3:594:13
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

3:59 · section reference included

Test the device that has never connected

The first implementation missed a pairing-related bug because Taylor tested locally with a device that was already paired. Anthony reported the problem and Sid fixed it. That is a specific testing lesson for authentication changes: existing session state can hide a broken first-use path. A successful connection from a familiar browser does not exercise the same conditions as a new device arriving without prior approval.

The contribution also moved through a rapidly changing repository. Taylor started with issue #1560 and PR #1710, then went on vacation. He reports that repository numbering advanced from roughly 1,500 to almost 16,000 during his two-week absence. These are issue and pull-request identifiers, not counts of users. He says the original PR was closed as stale, and getting the eventual contribution merged required substantial rebasing.

5:275:51
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

5:27 · section reference included

McClaw, Discord and a workspace without SSH

Taylor’s own instance, McClaw, runs on his desk in Montreal. He primarily talks to it through Discord, with WhatsApp also configured. He previously used Telegram but moved away after his CEO raised concerns about its encryption. The precise distinction is that Telegram Cloud Chats use client-server encryption, while Secret Chats provide end-to-end encryption; ordinary Telegram conversations are not simply transmitted in plaintext. His choice of Discord is a workflow preference here, not evidence of stronger message confidentiality.

McClaw helped implement the trusted-proxy contribution itself. That exposed a separate permission problem: Taylor gave the agent full access through the GitHub CLI, and it published a pull request before he had finished reviewing the work. He returned the PR to draft. Securing access to an agent’s control plane does not determine what the agent may do with credentials once it is running.

After the authentication feature merged, building from his phone became enjoyable enough that Taylor created Clawspace through Discord. It lets him browse, read and edit OpenClaw workspace files without opening an SSH session. The value is personal and concrete: a small interface removes a recurring obstacle in his own workflow, without needing to become a tool everyone else adopts.

6:517:05
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

6:51 · section reference included

Put a live workspace inside ChatGPT

The live demonstration starts with a limited MCP app built from an existing template. The AI Engineer website exposes developer-facing entry points, including llms.txt and an MCP server. Taylor uses the conference as the subject for an app he can register in ChatGPT and then extend through OpenClaw.

The initial connection follows a short sequence:

  1. Create the application in ChatGPT and configure OAuth.
  2. Register the MCP server and complete the connection.
  3. Inspect the available tools: echo and searchSpeakers.
  4. Invoke the app with Echo hello.

The tool call returns an associated interface inside the conversation. MCP Apps provide this UI extension to MCP: the result can be an interactive widget rather than only text. The Echo widget displays hello, exposes action buttons and can be enlarged within ChatGPT.

An Echo widget in ChatGPT shows “hello” under Echoed Message, with Call Echo Tool, Update Context, Clear, Send to Chat, and Open Docs buttons. Discord is open alongside it.
ChatGPT displays the embedded Echo interface with the echoed message “hello” and action buttons.

Taylor then asks McClaw to change the echoed message to AIE EU in the Echo widget. Underneath the chat interface, this is a web development loop: React renders the widget, Vite serves the application, and React Refresh with Vite hot module reloading carries workspace edits into the running interface. McClaw changes the MCP app’s files while Taylor remains in ChatGPT.

Two access boundaries make that arrangement work. Trusted-proxy authentication governs access to OpenClaw’s gateway. Separately, Pomerium gates a public URL for the MCP service in the workspace, allowing ChatGPT to reach it through controlled access. Protecting the gateway alone does not automatically protect every service the agent starts; the MCP endpoint needs its own gate. Taylor can then keep developing against the same interface he is using to exercise the app.

8:438:52
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

8:43 · section reference included

Expose the service, preserve the boundary

Pomerium is Taylor’s choice for this setup, but he also points to Caddy with OAuth as an alternative. The architectural requirement in his workflow is to make a local service reachable by an external host while retaining an access gate. He briefly mentions NGINX, then narrows his deprecation remark to a Kubernetes ingress controller. The relevant retirement announcement concerns the community Ingress NGINX controller, whose maintenance was scheduled to end in March 2026—not NGINX generally.

That infrastructure changes where development can happen. Taylor recalls seeing Replit’s phone-based building experience and wondering why he would ever want to program that way. Now he routinely enjoys building through chat on his phone. Clawspace is his example of the payoff: make a tool that fits the way you actually work, even if its audience is only you.

The freedom still depends on limits. Taylor closes by warning about accidental public exposure and destructive agent actions, including reports of deleted email. Trusted-proxy authentication is useful to him because it makes controlled access less cumbersome; it does not replace careful decisions about which services are exposed or which credentials an agent receives. The invitation is to build personal tools and enjoy the process while keeping those boundaries deliberate.

15:1515:27
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

15:15 · section reference included

Resources

From the talk

Updates since the talk

Read the complete timestamped transcript
  1. 0:00

    [upbeat music] Yeah.

  2. 0:15

    So, uh, like, like Phil said, I work at Pomerium, and he's not the first person to have trouble pronouncing it. So I actually convinced the marketing team to, uh, create Pomeranian stickers, so if anybody wants Pomeranian stickers, I have a bunch with me.

  3. 0:31

    Um, a bit about me. Uh, uh, I'm a, a dev advocate over at Pomerium, as Phil said. Um, from Canada, uh, hailing from Montreal, so, uh, if anybody likes poutine and bagels, feel free to chat with me after.

  4. 0:44

    Uh, also a GitHub Star, Microsoft MVP, and AWS Community Builder, and these ... You can pretty much find me everywhere, uh, [REDACTED:username] online.

  5. 0:55

    Um, I was pretty happy to see this, that there's a, a pretty sizable instance on-prem of, uh, OpenClaw, so was pretty happy with that, and it looks like that's the operator there.

  6. 1:08

    Cool. So, uh, I don't know, I came up with a funny title I guess, but Claws Out. Um, w- we're gonna talk about a feature I contributed to the OpenClaw project back in February, and it's about hardening access to the control plane.

  7. 1:25

    So, uh, I'm assuming everybody here is running an OpenClaw or OpenClaw-curious. Um, is anybody running, uh, a mode called trusted-proxy auth mode? You, you might not be, but, uh ...

  8. 1:38

    Okay. You might be on the ... Who's on the token, uh, auth-

  9. 1:42

    Me.

  10. 1:43

    Okay. Um, anyways, so at Pomerium where I work, um, you know, I'm always just trying to secure things. That's just part of what I do. And I was able to secure OpenClaw, but it meant I still had to add a token, uh, for the WebSocket connection.

  11. 2:01

    I had to always pair my device and stuff. And you don't really need that with a, a trusted proxy, like specifically the one that I work on, which is OpenCore.

  12. 2:12

    It's called an identity-aware proxy. So if anybody's ever used GCP, uh, there's a IAP in there. It's called an identity-aware proxy, something that came out of Google. Uh, essentially you've got an identity provider, a policy engine, and a reverse proxy, so those, uh, it's not the lethal trifecta in the sense that you usually hear, but, uh, it's

  13. 2:33

    a pretty solid security approach for securing internal apps. So I was like, of course, I, I, I kinda got annoyed that I had to add this token still and do the pairing every time.

  14. 2:44

    Uh, I understood why they were there, but, uh, I just proposed this issue, and then, uh, at least one other person who uses Caddy, uh, chimed in and said, "Hey, that's, uh, sounds like a good idea."

  15. 2:56

    And then Peter, uh, stipe, was like, "Yeah, let's, let's work on this," and he laid out, like, the criteria that he wanted to have for this feature. So I went ahead and worked on it.

  16. 3:09

    And yeah, again, prior to trusted-proxy auth mode, even if you were secured by a proxy, you still had to paste in that auth token in the UI for the WebSocket connection, and also it sticks it in the query string, which, uh, obviously, like this is really more for just only local mode really.

  17. 3:28

    Um, and still having to pair the device, like, uh, I don't know if people get annoyed by pairing the device, but, uh, I, you know, I'd, I'd just be on a, my phone after I just set it up, and then I was like, "Oh, I gotta go to the other thing to set it up," so.

  18. 3:40

    Um, basically you still had to do those things even if it was secured with, uh, a proxy.

  19. 3:48

    So got merged in, and, uh, I felt pretty good about it, and, uh, it was nice to get some praise from Peter. It was, uh, my first contribution to the project, so it was very cool.

  20. 3:59

    So what does it look like exactly, like in the config? Uh, I'm just gonna show like a, kind of a narrow part of the config here. But you have your gateway, and essentially you no longer need the token, like I mentioned.

  21. 4:13

    Uh, the mode is obviously different, so it's called trustedProxy now. And then there's some new properties you have to add. So there's trustedProxies, and this is essentially the proxy that is gating access to the control plane, the, uh, the gateway.

  22. 4:28

    Um, it's the IP addresses. Uh, it could be one or more. And aside from that, you have to have a trustedProxy section. So you'll have a userHeader, which is in, in my case, uh, it's a JWT, uh, J-W-T.

  23. 4:42

    Um, and then there's like a requiredHeaders section. There's some optional ones too. It depends what you wanna do. There's like allowUsers, and in my case I don't need the allowUsers because the way a, a identity-aware proxy works is the policies dictate that.

  24. 4:58

    Um, but essentially that's w- kind of the, the big change there, and you can do this through the onboarding or if you just go back in and, uh, configure things through the TUI.

  25. 5:10

    And yeah, so that just meant no more token for WebSocket connections and no longer needed to pair devices. So not only are you, uh, getting, uh, better security posture potentially, uh, to me it's like a UX win as well, 'cause, uh, I really found doing these two things annoying.

  26. 5:27

    Um, cool. Uh, I also just wanna give a shout-out to a couple contributors. After I ch- contributed this, um, there was a bug and Anthony reported it, and then, uh, Sid fixed it, and, uh, it was definitely [laughs] something I missed because I basically was testing this on my local environment, and I already had something paired, so I

  27. 5:51

    didn't run into the issue that, uh, Anthony had mentioned. So, uh, luckily, uh, it was a small fix and, uh, Sid got that sorted out. But just, uh, you know, when you miss stuff, uh, people in the community step up, so OSS for the win.

  28. 6:07

    The other thing I want to mention, it's not so much about this feature, but like when I open this issue, um, the number of the issue is [REDACTED:generic_id], and I had a, a PR initially that was like in the 1700s.

  29. 6:21

    And I went on vacation and I said, "Oh, I'll get back to it [laughs] when I'm back." And the original PR was closed 'cause it was stale and like literally after two weeks it went from like 1,500 to like almost 16,000.

  30. 6:34

    So, um, basically, that's just a testament to how popular the project got, but it also meant I had to, uh, rebase quite a bit [laughs] before it got merged. So anyways, I don't know if anybody else that contributes to the project, but there's so many things going on all the time, so there's a lot of, uh, rebasing to

  31. 6:51

    keep your thing up to date. Cool. So, uh, let's talk about my own OpenClaw. So this is McClaw, and he's sitting on my desk in Montreal right now. There's some snow still.

  32. 7:05

    Um, I use it in Discord. I don't know where people use their OpenClaw. I had it on Telegram initially, but they don't actually, um,

  33. 7:14

    uh... Their, their, uh, channels aren't encrypted, so like all the stuff's in clear. So I work at a security company, and my CEO is like, "Yeah, don't use that."

  34. 7:23

    So anyways, uh, I'm mainly on Discord. I find it use- uh, handy that way. I have WhatsApp too, but, uh, I tend to use the Discord more.

  35. 7:32

    Um, some things I wanna mention too is when I made the contribution, I actually used OpenClaw to make the contribution, which was kind of fun. Um, but it also...

  36. 7:44

    Uh, I made the mistake of, uh, I used the GitHub CLI, and I gave it full access, so it put up a PR right away even before I was like done reviewing things.

  37. 7:53

    Uh, so I had a little like, "Ah," but, uh, put it back into draft mode. Um, but aside from that, um, after the, uh, token, uh, trusted proxy mode got merged, I just started working on something.

  38. 8:08

    It started getting fun to just build stuff on my phone. So I built out something called Clawspace and, you know, doesn't, doesn't mean you need to use it. It's just, you know, it's the age of personal software.

  39. 8:19

    I just had a lot of fun building it. I find it useful, and I thought it was just cool that I could build this out on my phone on Discord.

  40. 8:26

    Um, but for me, I find it useful because I don't need to SSH in to see workspace files that I wanna actually read or like edit. Uh, so, um, that's just a little side project I started building, and you can edit files and stuff too.

  41. 8:43

    Cool. So we're gonna do a demo here. This is gonna be, uh, live coding, [laughs] so YOLO.

  42. 8:52

    Okay. So, uh, there's a MCP track tomorrow. Uh, I've been doing a lot of work in MCPs. So what we're gonna do is we are going to build out an MCP, uh, not a full-fledged version of something.

  43. 9:06

    But if you've seen the, uh, AI engineer website, they have like an LLMs text on the right, and there's a MCP server, and there's a few other things. So I'm gonna go ahead and just add this here.

  44. 9:24

    And I'm gonna go create an app. I'll explain some things here in a second.

  45. 9:34

    Okay. And OAuth. Okay. So this is gonna go create an application in ChatGPT. Uh, but basically, this is, uh, an MCP server that just has UI as well. They'll, they'll be talking about this tomorrow.

  46. 9:49

    But, uh, I have a template that I use for this, so it's not like I'm building this from scratch. But we're just gonna register the MCP here, and then I'm just gonna start building with OpenClaw.

  47. 10:03

    And the thing with agentic is you never know when it's done. It's just finishing up OAuth here.

  48. 10:12

    Okay, cool. It's connected, and we can see here it's got two tools. It's got a echo tool, and it's got a searchSpeakers tool.

  49. 10:23

    So if we come here, if nobody's ever used MCP apps, basically in ChatGPT, you do this for your app. And I'm gonna say like, "Echo hello."

  50. 10:36

    And essentially, it's going to do the tool call, but because there's UI associated to it, you're gonna get some UI in here. And this is just using the standard MCP stuff that's in the spec now.

  51. 10:50

    Um, so you can do stuff like change that, make it big and stuff. But what I wanna show is like when I'm building this with OpenClaw, I can do stuff like this.

  52. 10:59

    I can say like, uh, ba, ba, ba, "Change

  53. 11:05

    echoed message to AIE EU in the echo widget."

  54. 11:15

    Now, it's gonna take a second, but, um, this is all web tech under the hood, so I don't know if anybody's, uh, web devs here. But essentially, it's using Vite and React, so there's React Refresh and Vite hot module reloading.

  55. 11:27

    McClaw is on the case here, and you can see I'm in ChatGPT. I'm editing live from my workspace, the MCP. And, and to explain how this is working, uh, we have the trusted proxy auth mode.

  56. 11:41

    Uh, I happen to be using Pomerium in this case, so I'm using it as well to secure other things in the workspace. So I have a public URL that I've gated for the MCP, and that's how I'm able to use it in ChatGPT.

  57. 11:53

    And I can go ahead and just keep working on it in here. And I don't know how other people work or build with, uh, OpenClaw, but this is kinda how I've been doing it.

  58. 12:01

    I find it works really well for web dev stuff. So I'm gonna go say update the searchSpeakers. So let's just do this, a new chat, and I'll say, "@AIE" again,

  59. 12:14

    "searchSpeakers."

  60. 12:18

    And it's gonna give, uh, a very minimal UI here 'cause, uh, there's not much into it. Uh, so I'm gonna just tell McClaw to get on the case here.

  61. 12:27

    And basically, if you go to that top right corner of the AIE, uh, website, there's a speaker.JSON, and this is, like, all the speakers from the conf. And we're gonna use that as, like, the source of users, and then I'm asking it to kinda give the same UI as what you kinda saw in the Echo widget.

  62. 12:47

    Uh, it's gonna take a minute here probably 'cause, uh, McClaw is covered in snow probably in Montreal, but, uh, cool. And so basically once this gets done, uh, we'll be able to filter users and just kind of, you know, see who's talking, um, at the conference.

  63. 13:06

    And I'm just gonna take a sip of water while McClaw is chugging along there.

  64. 13:19

    Again, you never know when agentic finishes. Okay, it's determininst- deterministically an indeterminate. So this should be done in a second, and then what you're gonna see is you're gonna see this updated.

  65. 13:35

    And again, just to reiterate the flow, I- I'm, I'm working in workspace files in my OpenClaw. I'm speaking to it or typing to it in Discord. Uh, this is a publicly available site, uh, and I'm able to build it as I'm in my OpenClaw.

  66. 13:52

    And I like that workflow. I really don't know how other people work. I mean, obviously I use other tools like Claude and, and Codex too. Um, but you can see here, um,

  67. 14:03

    McClaw was able to get the job done, and then I can start filtering. So we could look for drilling down here, then we can find a speaker, and then we can get a bit more information.

  68. 14:15

    And then, like, I could say, let's add another feature here. So let's get McClaw on the case again.

  69. 14:25

    So we're gonna add a More button here, and there's this send message function that you can use in MCP apps. And this is actually going to, uh, when you click the but- the More button that it's gonna generate, this will actually make a call to the LLM to, a- and you're gonna get a response back.

  70. 14:42

    Uh, so we'll give this a second. Cool. So I added this More button in.

  71. 14:51

    Uh, again, like I've been doing web dev for a while, and I, I always still find it magical when things just automatically update. But I'm gonna go ahead and click on here, and you're gonna see here that it's thinking now.

  72. 15:02

    So it actually made a call, uh, added another, uh, prompt to ChatGPT here, and it's gonna kinda summarize why it thinks you should check out Alessandro's talk and a bit more about it.

  73. 15:15

    Now, I just really find this workflow really cool. It's only possible if you use some kind of proxy to do this. Uh, you can do this with others like, uh, Caddy with OAuth.

  74. 15:27

    You could do it with, uh, well, NGINX is kinda deprecated at this point. Or not deprecated, but, uh, at least in Kubernetes land, the Ingress Controller is. Um, but it's just a really nice way to gate stuff that is local, but you can still expose it in a secure way.

  75. 15:44

    Um, and it's also just fun buil- Like, I don't know about anybody else, but I've been really enjoying building stuff, just chatting. Uh, I remember a couple years ago, uh, Replit, um, who's, who's a AI company that's, you know, making it really easy to build stuff.

  76. 16:00

    I was like, "Why would I ever wanna build on my phone?" And, uh, I kinda got, uh, phone-tilled now, I guess. So, um, just fu- you know, just having fun.

  77. 16:10

    I think that's part of the thing with OpenClaw. Also, just, like, use it however you want to. Like, I, I find that Clawspace I created super helpful. Uh, you know, build your own tools and stuff.

  78. 16:21

    Um, definitely take security into consideration. Uh, you know, there's a bunch of people that have obviously, you know, exposed things and they didn't mean to. Like, you know, some people have deleted all their emails, et cetera.

  79. 16:34

    Um, but I don't know. I, I find the trusted proxy auth mode super useful and at least one other person [laughs] does in the, in the, in that issue. Um, I encourage you to check it out.

  80. 16:45

    Uh, just have fun building stuff. And yeah, that's, uh, pretty much it. My name is Nick Taylor, and that's how I build with OpenClaw. [audience applauding] [upbeat music]