Clients wanting you to be agile sounds more like clients that just want to change their mind (which is fine).
It seems like instead of:
- Get requirements
- Sign the contract with Julien to deliver X for $Y.
- Julien delivers X
- Julien gets paid Y
They want:
- Get very, very vague requirements
- Sign the contract with julien to deliver whatever they want (X? Y? X+Y? Z??), which is undetermined, and pay Julien $Y.
- Julien works toward ever-changing requirements.
- Requirements are never met.
- Julien never gets paid because they are never satisfied.
In this case I would simply charge per-hour.
Don't worry about fixed price or an "agile" contract. If you try to re-contract for every change, it will eventually become more pain than it is worth. Your best bet here would be to have a per-hour charge, and have them sign off on timesheets you provide on a per-week or something similar basis. This way both you and they can be as agile as needed while you have a better guarantee of getting paid. Just do great work and any good client will see your value. If not, you're better off just passing on the particular client if you have the opportunity.
For a more Agile approach..
You could, essentially, have a shorter estimate contract per-iteration. Each 2-week (or whatever time) iteration that you plan, have a shorter contract/amendment that outlines the requirements and estimates just for that iteration. Let the client change requirements, but only give them that luxury at the end of each iteration when you do the planning for the next iteration.