23 comments

  • ksri an hour ago

    Related. We have several third party web apps in use. These apps don't expose a public api, but they are all single page web apps. We wanted to connect claude code to these web apps for our limited use case.

    We opened chrome, navigated the entire website, the downloaded the network tab as an har file. The asked claude to analyze and document the apis as an openapi json. Worked amazing.

    Next step - we wrote a small python script. On one side, this script implements stdio mcp. On the other side, it calls the Internal apis exposed by the 3rd party app. Only thing missing is the auth headers..

    This is the best part. When claude connects to the mcp, the mcp launches a playwright controlled browser and opens the target web apication. It detects if the user is logged in. Then it extracts the auth credentials using playwright, saves them to a local cache file and closes the browser. Then it accesses the apis directly - no browser needed thereafter.

    In about an hour worth of tokens with claude, we get a mcp server that works locally with each users credentials in a fairly reliable manner. We have been able to get this working in otherwise locked down corporate environments.

    • alexblackwell_ an hour ago

      Super cool. I think this is where most automation is heading . Would be curious if you could one-shot the auth flow using Kampala and completely ditch the browser. Also FWIW you can import HAR into Kampala and we have a few nice tools (like being able to a/b test payloads/replay requests) that meaningfully reduce integration time.

    • namanyayg an hour ago

      Smart! That's what I do as well for customers when they ask me to build a vibe coding layer on top of their SaaS platform.

      Takes very little time and tokens and I get to plug into their platform in seconds.

  • IMTDb 38 minutes ago

    Congratulations.

    How do you handle SSL pinning ? Most of the apps I interact with have some sort of SSL pinning, which is the hard part to circumvent. I tried Kampala but got stuck at the usual place; as soon as I enable it, chatGPT stops working. Most of my iPhone apps stop responding etc.

    I would love to try using this tool to build an agent that can simply subscribe me to my gym lessons instead of me having to go on the horrible app. But even that relatively simple (iOS) app stopped working as soon as I enabled the proxy.

    • alexblackwell_ 17 minutes ago

      Unfortunately we can’t do much around SSL pinning yet. Not sure how deep you want to go, but there are several Frida scripts that patch common pinning implementations.

      I also think mitmproxy (open source) has an option to spin up a virtual Android device that can bypass pinning via AVD. I have not tested how reliable it is though.

      FWIW, it could also be a cert trust issue. I would try a quick Safari search to confirm the cert is fully trusted. ChatGPT is pinned, but the gym app makes me think it might be a trust or config issue on your device.

      Happy to take a look as well. Email me at alex at zatanna dot ai.

  • dataviz1000 an hour ago

    I built the same thing as this just for websites. [0] I'm more interested in using Claude recursion to tune itself -- the agent writes itself, the agent -- than hacking websites. It is a good demonstration that 47 iterations of a recursive Claude agent writing itself to decompose any transport.

    I've tested it against YouTube, Twitch, Ticketmaster, and Yahoo Finance. It will detect any transport like JSON, WebSocket, GraphQL, SSE, Protbuf, UDP, WebRTC, ect.. It after 3 hours and some coaching succeeded in reverse engineering ChatGPT + Cloudflare Turnstile but I didn't merge that into it yet.

    It works by Claude using the Chrome DevTools Protocol (CDP) intercepting all traffic.

    [0] https://github.com/adam-s/intercept?tab=readme-ov-file#how-i...

    • alexblackwell_ 40 minutes ago

      We’ve essentially been using that “recursion” to tune our agent. Having the agent build itself is not something I would have ever thought of though. Curious if you find it genuinely creates specific enough tools for it to be worth the setup time? I have a claude skill that takes in a chat and then offers tools/fixes to system prompt. Have found that + the anthropic harness engineering blogs to be super useful in making the agent actually do the work.

      • dataviz1000 32 minutes ago

        Have a look at https://github.com/adam-s/agent-tuning. Now, I'm working on developing the evaluation, the part that quantifies the performance of the agent. I'm having a hard time explaining it. You should be able to point Opus 4.7 to the repository and it will know how to set it up in your project.

        You are welcome to send me an email at [my_username]@gmail.com if you want to talk about some of these things that I'm working on that are in your space.

        `intercept` is just a proof-of-concept and at this point, if it added any value to what you are working on, that would be the best. Overall, people are pounding every website and your product will save billions in compute from AI inference to servers grinding and grinding getting pounded by these bots.

        What I saw looking at Anthropics Github code is they use git worktrees. So the recursive agent would copy itself into a git worktree which means it has to clone from 'main' branch. What I discovered is that Claude can create and copy everything into /tmp/[recursive instance] without a git worktree and control all the setup and code to start.

        Moreover, 'intercept' will work on updating the .claude/ for one website at a time or run against 5 at one time with same prompt to ensure no regressions.

    • namanyayg an hour ago

      Nice ty for sharing I was going to build something like this for a customer.

      I think just downloading all network traffic and giving it to claude code is the fastest and cheapest approach for 99% use cases.

  • madradavid an hour ago

    Congratulations on the launch.

    Totally unrelated, I am just curious about why you chose the name, as someone who is Ugandan and was born in raised in Kampala (which is the Capital City of Uganda BTW).

    Congratulations again.

    • alexblackwell_ an hour ago

      It was the (generated) name of the Conductor workspace when I started the project. We were going to rename it before launch but the name stuck lol :)

    • iconicBark an hour ago

      I was caught off guard as well!!

  • telecuda 42 minutes ago

    Congrats. You may want to consider dropping the "reverse engineer" language though, since most every application's ToS is clear on that being prohibited. Perhaps just "replay any application" or similar.

  • mkirsten 2 hours ago

    Cool! Links on the page doesn't work, at least not for me, e.g., https://www.zatanna.ai/kampala#how-it-works

    Also not clear on the page if it is apps from the local machine or on the network. Maybe some clearer examples and use cases would help?

    • alexblackwell_ 2 hours ago

      Oops now realizing that pattern where we send you to bottom latest download link is definitely confusing. Fixed so that the top button sends you straight to Download now.

  • Barbing an hour ago

    Zatanna

    Kampala (had to double check it wasn’t Harris)

    Just mulling these names over, how’d you come up with them?

    PS: clear value prop!

    • alexblackwell_ an hour ago

      Zatanna is a DC comic book character. I’m not sure if either of us have even read comics, so not sure where that came from. For Kampala, when I started this I was trying Conductor for the first time. The generated workspace name was Kampala (the capital of Uganda). We even have a 3rd name. We actually incorporated as NoPoll. That one’s a bit less inspiring though lol.

  • Sytten 2 hours ago

    Interesting product (Caido co-founder here). It is very hard to nail auth, probably the most underlooked aspect by end users. We are working on something similar for PoC reproduction of vulnerabilities.

    Fingerprinting is also a hard thing to match perfectly, I would be curious to know what your strategy is on that. My experience has been that unless you bundle multiple TLS lib it is almost impossible to do at 100% because none of the lib cover all the TLS extensions.

    • alexblackwell_ an hour ago

      We’re currently running a variety of stuff for TLS/HTTP2. If you download you can see the full trace of the connection. We dump the TLS connection byte for byte with the different structured subsections. With tls.peet.ws and bogdann finn’s tls-client (which we use parts of with some modifications) I would say that http3/tcp fingerprinting is probably the remaining issue. We currently don’t support http3 connections (they’re niche + apple system proxy doesn’t support them well), and TCP fingerprinting is a bit too low level to build out tooling in GO currently. Possibly for a later release. Curious if you’ve tried bogdann finn/the existing tooling?

  • lyime an hour ago

    How is this different/better than charles proxy/proxyman or similar apps?

    • alexblackwell_ 29 minutes ago

      I’ve probably spent on the order of months of my life in proxyman/charles/burp/powhttp. All are great, but I’ve never been completely satisfied with the UX/features for building automations. As far as differences; we don’t modify TLS/HTTP2 connections, have a fully featured MCP (each UI action is an api action by definition), and have built more robust automation tooling in the app itself. The goal is to be an AI-native burp suite/powhttp with Proxyman-like UI.

  • benagents an hour ago

    Great job Alex!

    Think this is really interesting especially for creating datasets. Proxyman was always hard to use for me, so connecting it to a MCP was something I have been waiting for.

    Quick question: How do you handle session re-auth mid-script?

    Congrats on the launch.. I need that conference script!

    • alexblackwell_ 13 minutes ago

      Thanks Ben! For session re-auth we attempt to agentically find the session refresh/login endpoints and make those part of the flow as an auth provider. This can be a bit sketchy though and is the main bottleneck right now. Currently working on some cool workarounds for this that allow us to piggy back on browser that should land by next week :)