Yup, got it working that way! So stoked! Telekinesis requirement works, so I'm all set to add skills to all the skill trees. These are the steps I used (some steps will be much easier when the editor comes out, but you have to do everything manually now):
1. Define Skillbook in object.txt in the public/shared/stats/generated/data folder. (Note that you may be able to make a new text file as long as its in own folder to keep track of your changes, but I'm not sure if that still works. Safest to just keep everything in the existing folders, but put things you add at the bottom so you can easily find things you add.):
new entry "SKILLBOOK_FeatherFall"
type "Object"
using "_Skillbooks"
data "Act part" "6"
data "Requirements" "Level 3; Telekinesis 2"
2. Define link to root template in the object.txt links folder in public/shared/stats/generated/data.
Generate a UUID with a site like the one Norbyte linked:
object itemstat "SKILLBOOK_FeatherFall","72aab2f8-8cc8-11e5-8994-feff819cdc9f","",0,0,"SkillbookAir",1,1,2,0,1,20
Note that SkillbookAir defines the object category for loot tables. The last two numbers define the levels you'll find the item (in traders or loot).
3. Define or use an existing skill in the skilldata.txt
4. Define the root template in a lsb. Haven't tested yet, but I'm pretty sure you can just make your own lsb instead of inserting the data into an existing one, but I inserted the following into the Books_Scrolls.lsb (after unpacking with Norbyte's tool of course, and repacking afterwards.) Put the root template in Public/shared/RootTemplates folder in your game directory.
Use an existing root template you want the skillbook to be most similar to, and then insert the UUID you put the links in the MapKey part, and the stats name from the object.txt in the data folder, and the skillname in the skilldata folder.
<node id="GameObjects">
<attribute id="CanBeMoved" value="True" type="19" />
<attribute id="CanBePickedUp" value="True" type="19" />
<attribute id="CanSeeThrough" value="True" type="19" />
<attribute id="CanShootThrough" value="True" type="19" />
<attribute id="CastShadow" value="False" type="19" />
<attribute id="Description" value="Telekinesis spells are kinetic spells. Read this book to learn this spell." type="28" handle="hd9bfb323g2f59g48c2gbd9dg906a8374a223" />
<attribute id="DropSound" value="c6a52c42-baa1-4090-aa42-7ef06760c067" type="22" />
<attribute id="Flag" value="0" type="4" />
<attribute id="GroupID" value="0" type="5" />
<attribute id="Icon" value="Item_BOOK_Spellbook_Air_A" type="22" />
<attribute id="IsSurfaceCloudInteractable" value="True" type="19" />
<attribute id="IsSurfaceInteractable" value="True" type="19" />
<attribute id="LevelName" value="" type="22" />
<attribute id="MapKey" value="72aab2f8-8cc8-11e5-8994-feff819cdc9f" type="22" />
<attribute id="Name" value="BOOK_Skill_Air_Teleportation" type="23" />
<attribute id="Opacity" value="0.225" type="6" />
<attribute id="PhysicsTemplate" value="d2c39c90-8c3c-45e4-8c58-a877bc160877" type="22" />
<attribute id="PickupSound" value="7b9b54b6-0ac8-48c2-ac7d-e31196256d88" type="22" />
<attribute id="RecieveDecal" value="False" type="19" />
<attribute id="Scale" value="1" type="6" />
<attribute id="Stats" value="SKILLBOOK_FeatherFall" type="22" />
<attribute id="Tooltip" value="2" type="1" />
<attribute id="Type" value="item" type="22" />
<attribute id="VisualTemplate" value="d9e49a21-8bfe-44a9-89ec-a5ae2ed12bfa" type="22" />
<attribute id="WalkThrough" value="True" type="19" />
<attribute id="maxStackAmount" value="50" type="4" />
<children>
<node id="AIBounds">
<attribute id="AIType" value="1" type="1" />
<attribute id="Height" value="0.178634" type="6" />
<attribute id="Max" value="0.255247 0.177119 0.270117" type="12" />
<attribute id="Min" value="-0.270443 -0.00151443 -0.392645" type="12" />
<attribute id="Radius" value="0.216147" type="6" />
</node>
<node id="Equipment">
<children>
<node id="CustomBodyMaterials">
<attribute id="Object" value="" type="22" />
</node>
<node id="CustomBodyMaterials">
<attribute id="Object" value="" type="22" />
</node>
<node id="CustomBodyMaterials">
<attribute id="Object" value="" type="22" />
</node>
<node id="VisualResources">
<attribute id="Object" value="" type="22" />
</node>
<node id="VisualResources">
<attribute id="Object" value="" type="22" />
</node>
<node id="VisualResources">
<attribute id="Object" value="" type="22" />
</node>
</children>
</node>
<node id="InventoryList" />
<node id="OnDestroyActions" />
<node id="OnUsePeaceActions">
<children>
<node id="Action">
<attribute id="ActionType" value="13" type="4" />
<children>
<node id="Attributes">
<attribute id="Consume" value="True" type="19" />
<attribute id="SkillID" value="Teleportation_FeatherFallBySummon" type="22" />
</node>
</children>
</node>
</children>
</node>
<node id="Scripts" />
<node id="Tag">
<attribute id="Object" value="Book" type="22" />
</node>
</children>
</node>
6. Define your crafting combination in ItemCombo.txt, if only to test things:
use object WPN_ArrowShaft_A on object LOOT_Essence_Air_A with transform code Destroy2Transform1 parameters SKILLBOOK_FeatherFall,0,0,0,0,0,1,1 requires Crafting 0 autolevel 1 autoValue 0
5. If you want to make custom stat/name descriptions, I think you'll have to input them into an lsb in the localizations folder. Haven't tested it yet, and not entirely sure how you generate the "handle," which is kind of like a UUID but with no dashes and always starts with an h.
6. Finally, rename the MainLSF.pak to Main.LSF.pak.original to disable it, just like for the speed mod. (I think if you use your own named lsb you might not have to do this, will check.)
Yeah, it's a lot to do for one skill, but it'll get easier. Good luck!