Settings

Theme

Show HN: Wick – censorship circumvention tech repurposed for AI web access

getwick.dev

4 points by adamfisk 2 months ago · 3 comments · 2 min read

Reader

I helped build Lantern, a censorship circumvention tool that’s been downloaded over 150 million times globally, with most users in China, Russia, Iran, and the UAE. Before Lantern I was the lead engineer at LimeWire (back in those days our whole dev team was about 5 people!).

Making your traffic indistinguishable from normal internet traffic has long been a foundational part of effective censorship circumvention, a technique sometimes referred to as “collateral freedom.” If censors can’t differentiate your traffic from other traffic they don’t want to block, then they can’t block you without incurring collateral – and economic – damage.

It turns out this is fundamentally the same challenge AI agents face when trying to crawl webpages. The tools they use are identifiable by various means, whether it’s unique TLS handshakes from Python, Go, Node, etc, or whether it’s details in the page processing that make it clear the requester is not a real browser and/or human.

To get around this, Wick uses Cronet (Chrome's network stack as a standalone lib) as the default for all requests. It’s not a headless browser – just the network layer. Wick works as an MCP server so Claude Code and Cursor pick it up automatically and also supports local API access. I also just got it on Apify's store if you want to try it without installing anything — it works from their datacenter IPs, which surprised me honestly. Importantly, it’s local by default. That way, if you’re running from your house, it can automatically take advantage of your residential IP address, which is less likely to get flagged.

The Cronet version is lightning fast and effective, but it doesn’t do JS rendering. If you need that (a requirement for accessing some sites), we have Wick Pro that does some fancy things on that side too that are very different from other tools out there.

Open source, MIT. Pro for $20/mo if you need JS rendering.

Code: https://github.com/wickproject/wick

Site: https://getwick.dev

adamfiskOP 2 months ago

Author here, but one piece I didn't dive into is CEF vs CDP. Things like Browserbase use Chrome Devtools Protocol, which is useful for manipulating the browser for some use cases, but it's also detectable in a variety of ways. Wick Pro uses Chrome Embedded Framework with tie-ins at the C++ layer. So it is actual Chrome, not a detectable protocol manipulating Chrome. Some details at https://getwick.dev/blog/cef-vs-cdp, but I'm curious if other folks have experience in this area or thoughts in general.

Wick is also local-first. So it's designed for local agents crawling successfully vs larger scale crawls simply because we haven't built out the infra.

admin82326 2 months ago

Python programmers! Complete the interpreter for me! THIS IS WHAT THE SOURCE CODE LOOKS LIKE: --------------------------------------------------------------------- "ladder - interpreted programming language" "this is a set (S) {1, 2, 3, 4, 5} "" "this is an amount (A) of the set (S) with an interval (I) [0;5) Ai S[i] "" "this is the product (P) of the sum of the "elements of the set (S) and an amount (A) of the set (S) "with an interval (I) I Pi S[i] + A ------------------------------------------------------------ HERE IS A PIECE OF THE INTERPRETER: ------------------------------------------------------------ import sys

SET = []; INTERVAL = []; SUMMA = 0; PRODUCT = 1;

def set_(line): global SET SET = list(map(int, line[1:-1].split(', '))) print(SET)

def interval_(line): global INTERVAL, SUMMA, PRODUCT interval, iterator, expression = line.split(' ') match interval[0]: case '(': l = int(interval[1])+1 case '[': l = int(interval[1]) match interval[-1]: case ')': r = int(interval[-2]) case ']': r = int(interval[-2])+1 INTERVAL = list(range(l, r)) if iterator: match iterator[0]: case 'A': for i in INTERVAL: SUMMA += SET[i] print(SUMMA) case 'P': for i in INTERVAL: PRODUCT = SET[i] print(PRODUCT)

def comment_(line): if line != '""': print(line) if line[-1] == '"': print()

def parse(line): match line[0]: case '"': comment_(line) case '{': set_(line) case '(' | '[': interval_(line) case 'I': print(sum([s*s for s in [e+sum(SET) for e in SET]])) # :-( case _: print(f'ERROR {line}')

def scan(f): for line in f: line = line.strip() if line: parse(line)

if __name__ == '__main__': f = open(sys.argv[1]); scan(f) f.close() ---------------------------------------------------- RESULT -------------------------------------------------- python ladder.py program.l "ladder - interpreted programming language" "this is a set (S) 1 2 3 4 5 "this is an amount (A) of the set (S) with an interval (I) 15 "this is the product (P) of the sum of the "elements of the set (S) and an amount (A) of the set (S) "with an interval (I) 1630

Keyboard Shortcuts

j
Next item
k
Previous item
o / Enter
Open selected item
?
Show this help
Esc
Close modal / clear selection