Q:

A Clojure project building several related small tools

I'm working on a Clojure project with a common library of functionality, but I want to use this library from a number of small command-line tools.
Let's call them tool1, tool2, tool3.
Each of these tools wraps the bulk of the library.
How should I organize my Clojure source code and what do I need in my project.clj file?
Right now my code is in 
src/projectname/core.cljc ; a default executable

cljc/projectname/lib1.cljc 
cljc/projectname/lib2.cljc ; cljc because I want to use from clojurescript too later

etc.
Where should I put the tool1.clj, tool2.clj etc?
My defproject is 
(defproject 
   ....
     :aot [projectname.core]
     :main project.core )

What do I need to put in to tell it that I want to make the three stand-alone separate, executable tools?

A:

You can do this using the lein-exec library.
First, set up ~/bin like this (or similar):
> ls -ldF  ~/bin/l*
lrwxrwxrwx 1 alan alan 26 Oct 31 08:29 /home/alan/bin/lein -> /home/alan/cool/tools/lein*
lrwxrwxrwx 1 alan alan 31 Oct 31 08:29 /home/alan/bin/lein-exec -> /home/alan/cool/tools/lein-exec*
lrwxrwxrwx 1 alan alan 33 Oct 31 08:29 /home/alan/bin/lein-exec-p -> /home/alan/cool/tools/lein-exec-p*

I have symlinks to the actual files, but you can copy them directly. Make sure ~/bin is in your path, of course.
Then just write an executable clojure "script" like the following. Of course, it must be executable:
> ls -l say-hello 
-rwxrwxr-x 1 alan alan 212 Nov  2 09:10 say-hello

> cat say-hello

#!/usr/bin/env lein-exec

(defn say-hello [name] 
  (println (format "Hello from the command line, %s!" name)))

(do 
  ; *command-line-args* = <cmd> <arg1> <arg2> ...
  (say-hello (second *command-line-args*)))

And off we go!
> ./say-hello buckaroo    
Hello from the command line, buckaroo!

As for project organization, I would start simple (as with any project!).  Maybe start off with just 1 source file, with different functions as entrypoints for each "script". As the project grows, it'll be easier to see where you would like to break out different namespaces/files.
Update
You can also do this with lein uberjar, and then invoking java directly:
(ns clj.core
  (:gen-class))

(defn say-hello [name] 
  (println (format "Hello from the command line, %s!" name)))

(defn -main [& args]
  (say-hello (first args)))

> lein uberjar
Compiling 1 source files to /home/alan/clj/target/uberjar/classes
Compiling clj.core
Created /home/alan/clj/target/uberjar/clj-0.1.0-SNAPSHOT.jar
Created /home/alan/clj/target/uberjar/clj-0.1.0-SNAPSHOT-standalone.jar

> java -jar /home/alan/clj/target/uberjar/clj-0.1.0-SNAPSHOT-standalone.jar pardner
Hello from the command line, pardner!

So just put the java command into a shell script to kick things off. Also note that :gen-class is required and that args doesn't include the script name anymore.  Of course, you must deploy both the script files and the uberjar.
Update #2
You can also use this version:
Source:
(ns clj.core
  (:gen-class))

(defn say-howdy [args]
  (println (format "Howdy, %s!" (first args))))

(defn give-reply [args]
  (println (format "Back at ya, %s!" (first args))))

(defn -main [& args]
  (let [method-name  (first  args)
        message      (second args) ]
    (cond 
      (= method-name "say-howdy" ) (say-howdy  (rest args))
      (= method-name "give-reply") (give-reply (rest args))
      :else (throw (NoSuchMethodException. (str "clj.core: invalid method='" method-name \')))))
)

scripts:
> ls -l say*
-rwxrwxr-x 1 alan alan 212 Nov  2 16:24 say-hello
-rwxrwxr-x 1 alan alan 104 Nov  2 16:35 say-howdy
-rwxrwxr-x 1 alan alan 105 Nov  2 16:35 say-reply

> cat ./say-howdy
#!/bin/bash
java -jar /home/alan/clj/target/uberjar/clj-0.1.0-SNAPSHOT-standalone.jar say-howdy pardner

> cat ./say-reply 
#!/bin/bash
java -jar /home/alan/clj/target/uberjar/clj-0.1.0-SNAPSHOT-standalone.jar give-reply $1

Run tools:
~/clj > ./say-howdy 
Howdy, pardner!

~/clj > ./say-reply
Back at ya, null!

~/clj > ./say-reply buckaroo
Back at ya, buckaroo!

Making the scripts smarter and deciding how to deploy the N scripts and single JAR file is left as an exercise for the reader.
;)

