This is Penn's @scan and some additional tools for MUX2. Enjoy.
@create ScanObj=10
&CREDITS ScanObj=Ashen-Shugar@RhostMUSH
&CMD_SCAN ScanObj=$@scan* *:@pemit %#=[u(do_scan[not(words(%0))][match(/room /self /zone /global,%0)],%0,%1,%#,$,@scan)]
&DO_SCAN00 ScanObj=Unrecognized switch '[lcstr(secure(%0))]' for command %4.
&CMD_SCAN2 ScanObj=$@scan:@pemit %#=What command do you want to scan for?
&CMD_SCAN3 ScanObj=$@scan/*:@pemit %#=[u(do_scan00,/%0,x,x,x,@lscan)]
&DO_SCAN10 ScanObj=[u(scan_contents,%0,%1,%2,%3,%4)][u(scan_self,%0,%1,%2,%3,%4)][u(scan_zone,%0,%1,%2,%3,%4)][u(scan_master,%0,%1,%2,%3,%4)]
&DO_SCAN01 ScanObj=[u(scan_contents,%0,%1,%2,%3,%4)]
&DO_SCAN02 ScanObj=[u(scan_self,%0,%1,%2,%3,%4)]
&SCAN_CONTENTS ScanObj=%rMatching on contents of your location:[iter(setdiff(lcon(loc(%2)),%2),u(scan_obj,##,%1,%2,%3,%4),%b,@@)]
&SCAN_OBJ ScanObj=[setq(v,0)][setq(1,trim(iter(lattrcmds(%0),u(scan_obj[hasflag(%0/##,regexp)],%0,%1,%2,%3,##),,@@)))][if(gt(words(%q1),0),%r[name(%0)]%(%0[flags(%0)]%) %[%qv: %q1%])]
&SCAN_SELF ScanObj=%rMatching on self and carried objects:[iter(setunion(lcon(%2),%2),u(scan_obj,##,%1,%2,%3,%4),,@@)]
&SCAN_ZONE ScanObj=%rMatching on zones in vicinity:[iter(setunion(lzone(loc(%2)),lzone(%2),u(dozone,[lcon(%2)] [lcon(loc(%2))])),u(scan_obj,##,%1,%2,%3,%4),,@@)]
&DOZONE ScanObj=[iter(%0,lzone(##))]
&DO_SCAN04 ScanObj=[u(scan_master,%0,%1,%2,%3,%4)]
&DO_SCAN03 ScanObj=[u(scan_zone,%0,%1,%2,%3,%4)]
&SCAN_MASTER ScanObj=%rMatching on master room:[iter(lcon(config(master_room)),u(scan_obj,##,%1,%2,%3,%4),,@@)]
&CMD_LSCAN ScanObj=@listenscan* *:@pemit %#=[u(do_scan[not(words(%0))][match(/room /self /zone /global,%0)],%0,%1,%#,^,@lscan)]
&CMD_LSCAN2 ScanObj=@listenscan:@pemit %#=What listen do you want to scan for?
&CMD_LSCAN3 ScanObj=@listenscan/*:@pemit %#=[u(do_scan00,/%0,x,x,x,@lscan)]
&CANUSE ScanObj=[gte(bittype(%#),5)]
@lock/UseLock ScanObj=CANUSE/1
&SCAN_OBJ0 ScanObj=[if(strmatch(%1,before(after(get(%0/%4),%3),:)),[setq(v,add(%qv,1))]%0/%4%b)]
&SCAN_OBJ1 ScanObj=[if(regmatch(%1,before(after(get(%0/%4),%3),:)),[setq(v,add(%qv,1))]%0/%4%b)]
&FUN_SCAN ScanObj=[u(scan_contents,%0,%1,%2,%3,%4)][u(scan_self,%0,%1,%2,%3,%4)][u(scan_zone,%0,%1,%2,%3,%4)][u(scan_master,%0,%1,%2,%3,%4)]
&CMD_COMMANDTREE ScanObj=$+commandtree*:@pemit %#=[switch([gt(words(setr(1,locate(%#,%0,*))),0)][gt(words(%0),0)],?0,list(lcon(config(master_room)),[ansi(hc,[name(%i0)]%(%i0[flags(%i0)]%))][u(fn_pipe,%i0)]),01,CommandTree: Target not found[setq(1,X)],11,[ansi(hc,[name(%q1)]%(%q1[flags(%q1)]%))][u(fn_pipe,%q1)]%r)][if(not(match(X,%q1)),ansi(hc,<--END))]
&FN_PIPE ScanObj=[setq(0,lcmds(%0,beep()))][iter(lattrcmds(%0),[if(or(not(words(%1)),regmatch(extract(%q0,#@,1,beep()),%1)),%r[ljust(if(hasflag(%0/%i0,noprog),ansi(hr,*LK*)),5)][ansi([ifelse(hasflag(%0/%i0,regexp),<#ffaf00>,<#af00ff>)],%i0)] -> [edit(edit(ansi(hg,extract(%q0,#@,1,beep())),*,ansi(hr,*)),?,ansi(hr,?))])])]
&CMD_SEARCHTREE ScanObj=$+searchtree *:@pemit %#=[list(lcon(config(master_room)),[ansi(hc,[name(%i0)]%(%i0[flags(%i0)]%))][u(fn_pipe,%i0,edit(%0,+,%[+%]))])][if(not(match(X,%q1)),ansi(hc,<--END))]
&CMD_SEARCHBYOBJ ScanObj=$+searchbyobj *=*:@pemit %#=[list([setdiff([setq(0,locate(%#,%0,*))] [lcon(loc(%q0))],#-1 #-2)],[ansi(hc,[name(%i0)]%(%i0[flags(%i0)]%))][u(fn_pipe,%i0,edit(%1,+,%[+%]))])][if(not(match(X,%q1)),ansi(hc,<--END))]
&CMD_SEARCHALL ScanObj=$+searchall *:@pemit %#=[list(search(eval=%[grep%(##%,*%,%0%)%]),[ansi(hc,[name(%i0)]%(%i0[flags(%i0)]%))][u(fn_pipe,%i0,edit(%0,+,%[+%]))])][if(!match(X,%q1),ansi(hc,<--END))]
@set ScanObj=INHERIT
@set ScanObj=SAFE