This is the script I wrote. Its a butchered and trimmed version of other skill up scripts I've seen. I'm only level 50 Geo at this writing but for me this code works perfectly.
Benefits: Automatically casts a Geo-Refresh Luopan during the skill cycle so you always have Refresh which maximizes skill up time. Also casts Indi-Refresh just before you /heal for added HMP and minimal rest time.
Other notes: You must have Indi-Refresh and Geo-Refresh or this code won't work. You can always edit the cycle spells you don't have.
As I said I'm only level 50 atm and for me this code works fine. At higher levels you might want to adjust the wait times to allow for fast cast. If you get an error message, "unable to cast at this time" then just increase the wait time for Geo-Refresh.
Enjoy!
Code xml
<spellcast xmlns:xi="http://www.w3.org/2001/xinclude">
<config Debug="false" ShowGearSwaps="false"/>
<variables clear="yes">
<var name="SkillUp">0</var>
<var name="RestTime">180</var>
</variables>
<sets>
<group default="yes" name="GEO">
<set name="Idle|Resting|Engaged">
</set>
</group>
</sets>
<rules>
<!-- Begin Skillup Code -->
<if Mode="AND" NotBuffactive="Refresh" Spell="Indi*">
<if MPGT="200">
<if advanced='"$SkillUp" == "1"'>
<changespell spell="Geo-Refresh" />
</if>
</if>
</if>
<!--- Check if your MP is low -->
<if Mode="OR" NOTMPGT="90" MP="90">
<if advanced='"$SkillUp" == "1"'>
<changespell spell="Indi-Refresh" />
</if>
</if>
<if spell="Indi-Refresh">
<if advanced='"$SkillUp" == "1"'>
<command when="aftercast">input /heal on;wait $RestTime;input /heal
off;wait 2;input /ja "Indi-Poison"</command>
</if>
</if>
<elseif spell="Geo-Refresh">
<if advanced='"$SkillUp" == "1"'>
<command when="aftercast">wait 4;input /ja "Indi-Barrier"</command>
</if>
</elseif>
<elseif spell="Indi-Barrier">
<if advanced='"$SkillUp" == "1"'>
<command when="aftercast">wait 4;input /ja "Indi-Poison"</command>
</if>
</elseif>
<!--- Geomancy Skill Cycling -->
<elseif spell="Indi-Poison">
<if advanced='"$SkillUp" == "1"'>
<command when="aftercast">wait 2;input /ja "Indi-
Voidance"</command>
</if>
</elseif>
<elseif spell="Indi-Voidance">
<if advanced='"$SkillUp" == "1"'>
<command when="aftercast">wait 2;input /ja "Indi-
Precision"</command>
</if>
</elseif>
<elseif spell="Indi-Precision">
<if advanced='"$SkillUp" == "1"'>
<command when="aftercast">wait 2;input /ja "Indi-
Poison"</command>
</if>
</elseif>
<!-- End Skillup Code -->
</rules>
</spellcast>