As A.Ellet pointed out in a comment, 「私は僕が」 doesn't make sense, so I modified some of the pronouns (or replaced them by nouns) in your question to make the sentences valid. Also, note that I placed pronouns that would be usually omitted in a natural conversation between brackets [ ] . Finally, I also added some complements 野菜【やさい】/ アイスクリーム to make the context clear, those complements wouldn't be necessary in a conversation to figure out whether it's "make" or "let", as long as we could tell the difference from other elements in the context. I added them just for clarity.
"I make the child eat vegetables" (context: children usually do not like vegetables, so you "force" them to eat) .
"I let the child eat an ice cream" (context: children usually want to make an ice cream, even if it's not so healthy, so you let them eat).
Note how ① and ② share the same structure, and even the same verb (食べる) and the same person (子供【こども】) so whether it's "make" or "let", it has to be determined purely by context. Therefore, if you don't add anything to your original sentence, like the kind of food, etc., it can be either case depending on the context.
At ③, it can only be "my father lets me eat ice cream", because the termination くれる means that someone else is doing something good, positive for myself, for my own sake. It wouldn't make sense to use くれる if my father is actually "forcing" me to eat vegetables.
Also note that くれる always means that someone does a favor to oneself (or your own group), not to others. That's why you can not say 彼【かれ】に子供がアイスクリームを食べさせてくれる。(incorrect).
At ④, it can only be "I let the children eat an ice cream", because あげる means that me (or someone in my group) is doing a favour or something good for someone else's sake. Since it's a favor, it's "let" and it can not be "make".
The difference with ③ is that in this case, it's me who does the favor to another person.
"I made/let the child eat."
"My father let (past) me eat an ice cream."
"I let (past) the child eat an ice cream."
Regarding the dicotomy make/let,
- ⑤ is the same case than ① or ②
- ⑥ is the same than ③
- ⑦ is the same case than ④
but whereas ①, ②, ③ and ④ are in present/future tense, ⑥, ⑦, and ⑧ describe past actions.
My suggestion is that you try to tackle the くれる/あげる dicotomy first without causatives, and once you've mastered them, and only after that, then try to see how the causative works with each of those terminations. Divide & conquer.
Besides くれる and あげる, there's still another option to convey that someone does something positive, for the sake of someone else: もらう. Therefore, using させてもらう, will always be a "let" case of the causative form as well. The difference between くれる/あげる and もらう is that the latter does not restrict the doer and the receiver of the favor, they can be myself (or someone in my group) or they can be someone else. It's more flexible:
Note that the actors in ③(B) and ④(B) are the same than in ③ and ④ respectively. When using もらう, the doer of the favor is marked with に, and the recipient of the favour is marked with が, so the particles に and が are swapped between the sentences ④ and ④(B).
- ⑨ お父【とう】さんに息子【むすこ】がアイスクリームを食べさせてもらう。"The father lets the son eat an ice cream."
As for ⑨, there is no intervention from you (or someone of your group), so くれる/あげる are not valid options here. It could be seen as the same case than ②, where the addition of もらう desambiguates the causative and gives a clue that it's a "let" causative. Again, note that the particles between ② and ⑨ would be swapped.