more interface
add hooker
make build system