Between 2000-2006 I worked at Tryllian, a Dutch company specialized in multi-agent systems. The company is non-active now.
The first idea at Tryllian was to build an agent-based search appliance (called Gossip). This had a graphical client app with a number of brightly colored circular agents with cute eyes. Each agent had a gap in its back in which a 'backpack' could be dragged. The backpack could contain a search query, and a number of search results (URL's, documents, images etc.). To do a search the user had to drag an agent with a prepared backpack onto the 'portal to the Internet' which was a kind of landing bay door with a starry background as you see in sci-fi movies. The agent would then be 'teleported' to the Tryllian server where it would be directed to a 'topic-room' by a 'butler-agent' which lived on the server. In the room it could interact with other agents and exchange search interests and -results. It looks like you can still download Gossip here.

Later Tryllian decided to develop an Agent Development Kit (ADK) with which one could create agent applications like Gossip more easily. It offered a task-based model for programming agent behavior. Your agent would get a lot of events (agentStarted etc) and in the event handlers could add tasks which in turn also would get events (taskStarted etc) and could schedule more complex behaviors (possibly in the form of subtasks). The API was really quite nicely done.
The key feature of the ADK was in my opinion the code mobility it offered; not only could agents travel between virtual rooms on their local ARE (Agent Runtime Environment), but could also travel to another server. This involved class serialization and a multi-classloader solution which was quite revolutionary at the time (we liked to think). This feature enabled designs where you bring the code to the data instead of having to pass data around (pumping data around is still a main feature of most enterprise systems I know of). For instance Tryllian developed a remote auditing application which allowed analists from the auditing company to encode auditing rules into an agent and send it securely to their client's server to monitor processes.
I'll stop before this answer starts getting really long (-;
This is probably all a bit more than what you are looking to achieve right now. If you can formulate your questions a bit more specifically I could give some advise on how to set up your multi-agent system (how to model messaging between agents is also a very intersting topic btw - oh sorry, I said I'd stop...).
What would your multi-agent system's purpose be? What would an agent do? Would it run on one machine, or distributed? Would agents be hardcoded, configurable or completely dynamic in their behavior/rules?
One last suggestion: A reasonable starting point for thinking about modelling simple agents is sense-plan-act which is usually associated with robots.
EDIT: response to your comment
The Tryllian agent model is focussed more on messaging than on tight interaction with a simulated physical environment. Looking at the example site you posted it seems like performance is pretty crucial especially when the number of agents rises. You would not be exploiting the Tryllian agent's strong points: code mobility, task-based programming, genericity, so I think it would not be the best tool for a simulation like this.
You mention a 'grid' versus a 'smooth' approach. I think in a computer simulation you will always need to represent the agents' size, coordinates, speed and direction withinin some sort of discrete system of coordinates. There wil thus always be some sort of grid, but you can make the 'cells' smaller to make it seem smoother.
Maybe there are some useful resources to be found in the gaming domain? (sprites, collision detection etc.)
Good luck and have fun!