You need more fuel in the warmup. There is a map that pulls fuel based on temperature... let me find it....
Primary Open Loop Fueling Compensation (ECT)
Is what it's called in my USDM 02 ROM. Stock values are -100 in the coldest columns. I have a different setup (E85 / no TGVs / ID1000). I multiplied this entire table by 0.65 before it was pretty good. Still does some oscillation, but definitely no vibration.
It'll take some trial and error to get the right scaling. I recommend re-copying the stock values and scaling each time, as small multipliers may make no change on the warmer columns.
The ECU is in open loop for a while until the O2 sensor heats up to temp, so this is why it goes away in 10-20 seconds. It's an open loop fueling issue.
MAF scaling may be off as well. My car never shook violently, but on E85 I would start and it would "catch" when the cranking tables were right, but then often die right after if this table and / or warm-up tables were not right. IMO this table is easier to deal with than the warm-up tables, because it's only one table instead of a bajillion in the warm-up category. And the only time the ECT is cold & the car is in open loop is when the car is warming up (unless you're dumb and floor a cold engine).