I hear mystics are all the rage.  I know someone rocking a mystic thunter/fisher with mining and does well.  You can even pass on the mining.  Here is a very simple script I wrote in lua to help me find chests.
dofile(getinstalldir()..'/scripts/kalilib.lua')
local tPicks = 3718
UO.CliNr = clientmenu()
UO.SysMessage('Target Map')
UO.TargCurs = true
while UO.TargCurs do wait(1) end
local mapID = UO.LTargetID
local axe = FindItemInCont('Type',tPicks)
axeID = axe[1]['ID']
function MapArea()
   local temp = {}
   for i = -1,1 do
       for j = -1,1 do
          if i ~= 0 or j ~= 0 then
             temp[#temp+1] = {UO.CharPosX+i*6,UO.CharPosY+j*6}
          end
       end
   end
  return temp
end
function TargetTile(mapID,axeID,x,y,z)
         UO.LObjectID = axeID
         UO.Macro(17,0)
         local timer = getticks() + 500
         while not UO.TargCurs do if timer < getticks() then UO.Macro(17,0) timer = getticks() + 500 end end
         
         UO.LTargetID = mapID
         UO.LTargetKind = 1
         UO.Macro(22,0)
         timer = getticks() + 500
         while UO.TargCurs do if timer < getticks() then UO.Macro(22,0) timer = getticks() + 500 end end
         while not UO.TargCurs do wait(1) end         
         
         UO.LTargetX = x
         UO.LTargetY = y
         UO.LTargetZ = ( z or UO.CharPosZ )
         UO.LTargetKind = 2
         UO.Macro(22,0)
         timer = getticks() + 500
         while UO.TargCurs do if timer < getticks() then UO.Macro(22,0) timer = getticks() + 500 end end
         wait(1100)
         return
end
local mXY = MapArea()
local xyOffs = {{0,0},{2,2},{2,-2},{-2,2},{-2,-2},{2,0},{-2,0},{0,2},{0,-2}}
local jI,bMsg,Msg = CheckJournal(0)
bMsg = true
local iXY,dXY = next(xyOffs)
while bMsg do
      TargetTile(mapID,axeID,UO.CharPosX+dXY[1],UO.CharPosY+dXY[2])
      jI,bMsg = CheckJournal(jI,{'dig and dig'})
      iXY,dXY = next(xyOffs,iXY)
      if iXY == nil then 
         miXY,mnXY = next(mXY,miXY)
         if miXY == nil then print('No luck here') break end
         UO.Move(mnXY[1],mnXY[2],0,2000)
         iXY,dXY = next(xyOffs,iXY) 
      end
end
if not bMsg then 
    UO.Move(UO.CharPosX+1, UO.CharPosY+1,0,1000) --cancel dig incase you're not paying attention.
    UO.SysMessage('Oh shi... hide!')
    print('Oh shi... hide!')
end
Take from it what you will, if you want to use it directly, you'll have to make your way over to easyuo and download my library from the openEUO scripts board.